مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

payam64

عضویت از 1397/01/14

تعریف DI بصورت اتوماتیک

  • یکشنبه 4 آذر 1397
  • 23:17
تشکر میکنم

با سلام و خسته نباشین

در صورت ازدیاد تعداد موجودیت ها من از الگوی ریپوزیتوری به همراه generic repository استفاده کردم برای همین تعداد موجودیت هایی که باید در کلاس startup تزریق بشن خیلی زیاده یا اصلا نمیدونم چطوری میشه اینترفیس های ژنریک رو از طریق کلاس startup تزریق وابستگی کرد.

آیا تکنولوژی در دات نت کور هست بشه باهاش بصورت اتومات کل اسمبلی رو برای تزریق وابستگی خودش اسکن کنه مثلAutoFac در mvc classic یا unity ؟

ممنون میشم در این زمینه راهنمیی کنین و یا در غیر اینصورت لینک مقاله آموزش استفاده از autofac با unity در دانت کور 2.1 رو قرار بدین 

با سپاس

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • دوشنبه 5 آذر 1397
  • 09:47

به صورت توکار تیم ASP.NET Core از این امکان پشتیبانی نمی کند و شما میتوان از DI Container های دیگ استفاده کنید، چند نمونه:

ASP.NET Core – fast and automatic dependency injection setup

Using Scrutor to automatically register your services with the ASP.NET Core DI container

کاربر سایت

payam64

عضویت از 1397/01/14

  • دوشنبه 5 آذر 1397
  • 11:43

مهندس اینو روش کار کردم با خود autofac اوکی شد

از ماژول های autofac برای تعریف اسمبلی های سایر لایه ها استفاده کردم برای هر لایه از یک کلاس ماژول جدا استفاده کردم مثلا برای کل ریپوزیتوری ها از کلاس پایین استفاده کردم

 
public class RepositoryModules : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(
Assembly.Load("Eshop.Core"),
Assembly.Load("Eshop.Repository")).Where(
a => a.Name.EndsWith("Repository"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
}

برای بقیه سرویس ها هم به همین صورت هست در انتها در کلاس startup و متد ConfigureServices باید ماژول های تعریف شده رو به container معرفی کنیم 

 
var builder = new ContainerBuilder();
builder.Populate(services);
builder.RegisterModule(new RepositoryModules());
builder.RegisterModule(new ServicesModule());
builder.RegisterModule(new ContextModule());
this.ApplicationContainer = builder.Build();
return new AutofacServiceProvider(this.ApplicationContainer);

البته نوع خروجی متد رو به IServiceProvider تغییر میدیم

البته خیلی شبیه خود mvc classic هست با کمی تغییرات در تعریف container

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)