PDA

View Full Version : دلیل خطای a reference to could not be added. adding this project as a reference



jaykob
یک شنبه 02 شهریور 1393, 18:26 عصر
سلام


من در پروژه خودم چندین لایه دارم اما در لایه اصلی خودم که به نام MyBlog.Web هست می خواهم به MyBlog.Services رفرنس بدهم خطای زیر را می دهد . اگر رفرنس داده شده از سرویس به وب را بر دارم درست می شه اما همین خطا رو دوباره زمانی می خواهم لایه های دیگه رو به سرویس رفرنس بدهم رخ می ده چیکار باید بکنم ؟



a reference to 'MyBlog.Services' could not be added. adding this project as a reference would cause a circular dependency

hakim22
یک شنبه 02 شهریور 1393, 19:19 عصر
به این دلیل است که شما قبلا در Service به پروژه ی Web یک Reference داده اید و حالا میخواهید از Web به Service هم رفرنس ایجاد کنید. این کار یک Circular Dependency ایجاد می کند. رفرنس دو طرفه ممکن نیست.

jaykob
یک شنبه 02 شهریور 1393, 19:28 عصر
به این دلیل است که شما قبلا در Service به پروژه ی Web یک Reference داده اید و حالا میخواهید از Web به Service هم رفرنس ایجاد کنید. این کار یک Circular Dependency ایجاد می کند. رفرنس دو طرفه ممکن نیست.


خیلی ممنون

ولی من از لایه سرویس به لایه های MyBlog.Web.Models و MyBlog.Web.ViewModel رفرنس دادم به خود MyBlog.Web رفرنسی ندادم و الان هم مثلا فایل کانفیگ Automapper من در Globax نیاز به ارجاع به لایه سرویس داره که الان نمی تونم این کار رو بکنم . چطور این مشکل رو حل کنم ؟

تشکر

hadi0x7c7
یک شنبه 02 شهریور 1393, 20:23 عصر
فکر کنم این مشکل با استفاده از اینترفیس حل بشه، منم قبلا به این مشکل خورده بودم

hakim22
یک شنبه 02 شهریور 1393, 23:27 عصر
غیر مستقیم هم ممکن است این مشکل بوجود آمده باشد. ممکن است شما در لایه ی سرویس به یک پروژه ی دیگر رفرنس داده اید که آن پروژه به لایه وب رفرنس دارد. اگر از پروژه های چند لایه استفاده می کنید حتما کدهای EF را از پروژه ی وب جدا کنید درون پروژه ی خودش قرار دهید. (همچنین Identity ها و همچنین ViewModel های آن را هم جدا کنید)

jaykob
دوشنبه 03 شهریور 1393, 10:38 صبح
غیر مستقیم هم ممکن است این مشکل بوجود آمده باشد. ممکن است شما در لایه ی سرویس به یک پروژه ی دیگر رفرنس داده اید که آن پروژه به لایه وب رفرنس دارد. اگر از پروژه های چند لایه استفاده می کنید حتما کدهای EF را از پروژه ی وب جدا کنید درون پروژه ی خودش قرار دهید. (همچنین Identity ها و همچنین ViewModel های آن را هم جدا کنید)

سلام

ممنون بله درست بود ، من از سرویس به لایه MyBlog.Web.Models رفرنس داشتم که اون به MyBlog.Web رفرنس داشت این رفنس رو برداشتم مشکل حل شد مشکل جدید این هست که برای تعریف کلید خارجی کلاس ApplicationUser مربوط به Identity به خطا می خودم در همه مدل های خودم در لایه MyBlog.Web.Models که کلاس IdentityConfig رو نمی شناسه و اون کلاس هم در لایه MyBlog.Web.DataLayer هست و قبلا به مدل ها رفنس داره و دوباره خطای قبل رو می گیرم ....

لطفا راهنمایی کنید

تشکر

jaykob
دوشنبه 03 شهریور 1393, 10:49 صبح
یک سوال دیگه :

فایل IdentityConfig و Startup.Auth که در App_Start هستش و Startup.cs که در روت است باید به لایه DataLayer برود ؟ چون زمانی رفرنس رو به مدل ها از پروژه وب برداشتم مقادیر این کلاس رو هم نمی شناخت و ApplicationUser و...

ممنون

hakim22
دوشنبه 03 شهریور 1393, 11:27 صبح
شما در حالتی چند پروژه ای کار می کنید مجبورید Models را در پروژه ای اختصاصی قرار دهید. فایل IdentityConfig هم در یک پروژه ی اختصاصی قرار می گیرد. در غیر این صورت با Circular Dependency مواجه میشوید.

jaykob
دوشنبه 03 شهریور 1393, 12:13 عصر
شما در حالتی چند پروژه ای کار می کنید مجبورید Models را در پروژه ای اختصاصی قرار دهید. فایل IdentityConfig هم در یک پروژه ی اختصاصی قرار می گیرد. در غیر این صورت با Circular Dependency مواجه میشوید.

سلام

تشکر از پاسختون

تمامی مدل های من در یک ClassLiberary جدا به نام MyBlog.Web.Models هستند .

پس فایل های IdentityConfig و
Startup.Auth ,Startup.cs را باید به ClassLiberary جداگانه ای ببرم ؟ نام این پروژه دقیقا چه باید باشد ؟

مشکل اینکه در لایه MyBlog.Web.Models مدل های من ApplicationUser را در خط زیر نمی شناسند چه کنم ؟ به لایه DataLayer هم نمی توانم رفرنس بدم ؟




public virtual ApplicationUser User { get; set; }




ممنون از راهنمایی های خوبتون

hadi0x7c7
دوشنبه 03 شهریور 1393, 15:12 عصر
این سایت رو نگاه کنید، خیلی خوب به نظر من طراحی کرده، از این ایده بگیرید
https://github.com/NikolayIT/BlogSystem

hakim22
سه شنبه 04 شهریور 1393, 11:52 صبح
کلاس ApplicationUser رو هم باید به Model ببرید.

jaykob
سه شنبه 04 شهریور 1393, 12:08 عصر
کلاس ApplicationUser رو هم باید به Model ببرید.

تشکر ، مشکلم حل شد .

فقط آیا کار درستی کردم که فایل های
IdentityConfig و Startup.cs و Startup.Auth را به لایه DataLayer بردم که از MyBlog.Web هیچ رفرنسی به MyBlog.Web.Models نباشد ؟

hakim22
چهارشنبه 05 شهریور 1393, 15:15 عصر
نیازی به جابجا کردن فایلهلی Startup.cs و Startup.Auth نبود.
اگر بخواهیم این تکنیک را اجرا کنیم که در همه ی View ها از یک ViewModel اختصاصی استفاده کنیم جدا کردم Model ها از پروژه ی وب اشکالی ندارد. و بهترین راه اطمینان از این قضیه حذف رفرنس ها از وب به مدل است