• 1400/03/12

مشکل در Dependency Injection :

با عرض سلام و احترام

من دو کلاس سرویس دارم ، یکی به نام AccountService :

یکی هم به نام MediaService :

و این دوتارو در لایه Ioc م اینجکت کردم برای استفاده :

اما در ران تایم اروری به وجود میاد :

مشکل هم پیدا کردم و اون اینه که اگر به ایجکشن هر دو کلاس AccountService و MediaService نگاه کنید متوجه میشید که من در درون هر کدوم از اونها یکی دیگر را درخواست کردم به این شکل که در AccountService اومدم و MediaService را درخواست کردم که اینجکت بشه توسط سرویس و در MediaService اومدم و AccountService را درخواست دادم تا اینجکت بشه توسط سرویس ، و به همین دلیل سرویس نمیتونه عملیات اینجکت هیچ کدوم را انجام بده چون وقتی میخواد مثلا AccountService را اینجکت بکنه نیاز به MediaService داره برای تولید شی ازش و وقتی هم میخواد MediaService را اینجکت بکنه نیاز به AccountService داره برای تولید شی ازش

خیلی هم تا الان در نت گشتم اما هنوز جواب درستی پیدا نکردم

با توجه به اینکه مطمئنم این نوع ساختار کلاس سرویس را حتما شما تا به حال باهاش مواجه شدید میخواستم درخواست کنم در صورت امکان لطفا منو راهنمایی بفرمایید که به چه شکل اینجکشن این دو کلاس رو انجام بدم

موفق باشید (:

  • 1400/03/13
  • ساعت 07:52

سلام 

خب اینکار صحیح نیست و من هم تا حالا اینکار رو نکردم 

برای متد های مشترک یه سرویس جدا درست میکنیم تا این اتفاق نیوفته


  • 1400/03/13
  • ساعت 09:39

با عرض سلام و احترام

منظورتون اینه که هر دو کلاسو تبدیل به یک کلاس میکنید ؟
چون اینطوری دیگه سربار ها خیلی زیاد میشن و این دو کلاس اونقدر اصلا بهم وابسته نیستن و کاربرداشون جداس

در AccountService من MediaService را برای استفاده از Email اینجکت کردم و در در MediaService هم من AccountService را برای ارتباط دادن کامنت و یوزر اینجکت کردم.

در صورت امکان لطفا کمی بیشتر توضیح بدید ممنون میشم

سوالم در StackOverFlow

موفق باشید (:


  • 1400/03/13
  • ساعت 09:44

داره یه حلقه ایجاد میکنه این مشکل در Dll ها هم برخی مواقع پیش میاد 

یادمه در یه پروژه انجامش دادم ، کدش رو پیدا کنم در اختیارتون قرار میدم ، الان اصلا خاطرم نیست 

فکر میکنم Inject نکردم در سازنده و در خودش از Service دریافت کردم 


  • 1400/03/13
  • ساعت 10:03

با عرض سلام و احترام

بله دقیقا یک حلقه بی نهایت درست میشه به دلیل وابسته بودن هر دو بهم و به این ترتیب اصلا اینجکشن انجام نمیشه و ران تایم ارور میده.

منظور شما اینه که خوده سرویس را به درون کلاس سرویسم پاس بدم و اونجا GetRequiredService کنمش ؟این روش را دقیقا یکی در StackOverFlow جواب داده اما مشکل اینه که این کار کل اصول معماری تمیزمو زیر سوال میبره : 

موفق باشید (:


  • 1400/03/13
  • ساعت 10:13

بله از همین روش استفاده کردم 

معماری ها فقط اصول هستند و برخی مواقع باید بنا به نیاز تغییر داده شوند 

مشکلی پیش نمیاد


  • 1400/03/15
  • ساعت 00:59

با سلام و عرض احترام

با توجه به مشکلاتی که این بحث تزریق وابستگی دو طرفه (دایره ای) به وجود میاره بهترین روش اینه که تا میشه کلاسو تقسیم کرد که کلا این بحث به وجود نیاد و این کار هم سرعت پروژه را بیشتر میکنه ، هم تزریق وابستگی را سرعت میبخشه و امکان پذیر میکنه و هم در آخر تمرکز زدایی میکنه که در جای خود کاملا مفیده !

من خودم بسیار سعی کردم جواب درستی برای حل این مسئله پیدا کنم اما متاسفانه در آخر دست به عقب نشینی بردم و دیدم در این مورد عقب نشینی شاید جواب سوالم باشه و به لطف یک دوستی کلا سوالم در stackoverflow بسته شد و جوابش شد همین عقب نشینی.

امیدوارم به دوستانی که در آینده قصد داشتند همچین روابطی به وجود بیارن هم کمکی کرده باشم.

موفق باشید (:


logo-samandehi