PDA

View Full Version : استفاده از ninject در لایه های مختلف برنامه



mf_007
یک شنبه 13 تیر 1395, 14:44 عصر
سلام آیا تزریق وابستگی در تمام لایه ها باید صورت بگیره ؟
اول اینکه من از ado.net تو پروژم استفاده می کنم تو لایه دیتا کلاسی دارم که کارهای مربوط به دیتابیس رو توش انجام می دم آیا برای این کلاس هم باید تزریق وابستگی صورت بگیره ؟
چون تو لایه سرویسم این کلاس رو new می کنم .
در کل منظورم اینه برای هر کلاسی لازم که این اتفاق بیفته ؟ چون باید اونوقت اینترفیسش رو هم بسازم .






-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
گچبری (http://www.argdesign.ir)، گچبری پیش ساخته (http://www.argdesign.ir)، پرستاری در منزل (http://sohatebnurse.ir) ، طراحی سایت (http://www.radway.ir)

hakim22
یک شنبه 13 تیر 1395, 15:16 عصر
خیر این کار برای هر کلاسی لازم نیست. گام اول در استفاده از IoC Container هایی مثل Ninject جدا سازی کلاسها از هم است. وقتی شما کلاسها را بر اساس کارکردشان از هم جدا کنید نیاز دارید آن هایی را که با هم کار می کنند دوباره به هم وصل کنید. در اینجا می توانید کار را دستی انجام دهید و از new استفاده کنید. اجباری به استفاده از Ninject ندارید.

ابزاری مثل Ninject فقط عمل تزریق وابستگی را بسیار ساده تر می کنند . فرض کنید کلاسهای چند لایه از پروژه به صورت تو در تو با هم کار کنند در این صورت ایجاد کلاس به روش دستی خیلی دردسر ساز است. (هرچند ممکن است)

mf_007
یک شنبه 13 تیر 1395, 15:21 عصر
خیر این کار برای هر کلاسی لازم نیست. گام اول در استفاده از IoC Container هایی مثل Ninject جدا سازی کلاسها از هم است. وقتی شما کلاسها را بر اساس کارکردشان از هم جدا کنید نیاز دارید آن هایی را که با هم کار می کنند دوباره به هم وصل کنید. در اینجا می توانید کار را دستی انجام دهید و از new استفاده کنید. اجباری به استفاده از Ninject ندارید.

ابزاری مثل Ninject فقط عمل تزریق وابستگی را بسیار ساده تر می کنند . فرض کنید کلاسهای چند لایه از پروژه به صورت تو در تو با هم کار کنند در این صورت ایجاد کلاس به روش دستی خیلی دردسر ساز است. (هرچند ممکن است)

ممنون از پاسختون
گفتید اجباری نیست اگر استفاده بشه چه مزیتی داره ؟

و اینکه عمل تزریق رو تو لایه mvc برنامه باید انجام بدم یا برای هر لایه تو لایه خودش ؟





-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
گچبری (http://www.argdesign.ir)، گچبری پیش ساخته (http://www.argdesign.ir)، پرستاری در منزل (http://sohatebnurse.ir) ، طراحی سایت (http://www.radway.ir)

hakim22
دوشنبه 14 تیر 1395, 16:24 عصر
مزیت اصلیش این هست که کد کمتری مینویسید. کنترل بهتری روی کلاسها دارید و لازم نیست همه چیز رو دستی مدیریت کنید. ضریب خطا پایین میاد و کد نویسی ساده تر میشه.

عمل تزریق باید در پروژه ی اصلی انجام بشه. در واقع IoC Container در پروژه اصلی که به پروژه های دیگر (لایه های دیگر) دسترسی داره میتونه کلاسهای مورد نیاز رو پیدا کنه و نمونه سازی کنه.

البته حالت پیچیده تری هم هست که کلاسها به صورت تو در تو از IoC Container استفاده کنند. که خیلی کم پیش میاد پروژه ای در اون حد پیچیده وجود داشته باشه.

mf_007
دوشنبه 14 تیر 1395, 22:46 عصر
اینکه گفتید لازم نیست همه چیز رو دستی مدیریت کنیم منظورتون آزادسازی منابع هست ؟ یعنی ninject تحت هرشرایطی نمونه هایی که می سازه رو dispose می کنه ؟ و خیالمون از این بابت راحت باشه ؟

و اینکه اگر به این صورت باشه کلاس هایی که استفاده می کنیم باید از اینترفیس idisposible ارث بری کنه و متد dispose براشون بازنویسی بشه ؟ یا همین که از ninject استفاده می شه کافیه برای از بین بردنشون و این کار لازم نیست ؟









-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
گچبری (http://www.argdesign.ir)، گچبری پیش ساخته (http://www.argdesign.ir)، پرستاری در منزل (http://sohatebnurse.ir) ، طراحی سایت (http://www.radway.ir)

hakim22
سه شنبه 15 تیر 1395, 14:28 عصر
آزاد سازی منابع در دات نت توسط GC به طور خودکار انجام میشه و نیاز به اجرا دستی اون وجود نداره. زمانی باید از IDisposable استفاده کنید که به هر دلیلی مطمئن هستید که اجرای خودکار مشکل داره و ممکنه درست انجام نشه (مثلا وقتی با کدهای Unmanaged کار می کنید مثل کتابخانه های COM )

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

http://sahraweb.com/post/1/%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%A7%D8%B2-%D8%AA%D8%B2%D8%B1%DB%8C%D9%82-%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C-%DB%8C%D8%A7-di-%DA%86%DB%8C%D8%B3%D8%AA-%D8%9F

http://sahraweb.com/post/2/%DA%86%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A7%D8%B2-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%85%D8%B9%DA%A9%D9%88%D8%B3-%DB%8C%D8%A7-inversion-of-control-%D8%A7%D8%B3