
استفاده از Autofac به جای اینجکتور توکار dotnet core
Autofac یکی از بهترین و سریعترین و محبوبترین ioc های دانت هست که مدیریت کامل برای ساخت ابجکتها و چرخه حیاط آنها را اراعه می دهد که بسیار کاملتر از ioc توکار خود دانت میباشد که با بزرگتر شدن پروژه ممکن است به آنها نیاز داشته باشید.
از این رو گزینه مناسبی برای جایگزینی آن با ioc خود دانت دارد.
در این لینک جدول مقایسه مدیریت چرخه حیاط ابجکتها را میبینید
بعد از ایجاد پروژه از جنس dotnet core
به سراغ پنجره Package Manager Console بروید و این 2 پکیج رو نصب کنید
Install-Package Autofac -
Install-Package Autofac.Extensions.DependencyInjection -
سپس به سراغ فایل Progeram.cs بروید و تغییر زیر را انجام دهید
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
دقت کنید که خط قرمز تنها تغییر بخش میباشد.
و کار تمام شد. الان شما پکیج Autofac را نصب کرده و به برنامه گفتید که از AutoFac به جای اینجکتور خود dotnet استفاده کند
حالا برای ثبت dependencyها وارد فایل statup.cs شوید و کد زیر را کپی کنید
public void ConfigureContainer(ContainerBuilder builder)
{
//#روش اول ثبت کلاسها
//builder.RegisterModule(new MyAutofacModule());
////builder.RegisterModule(new MyAutofacModule2());
////builder.RegisterModule(new MyAutofacModule3());
روش دوم : ثبت مستقیم //
builder.RegisterType<MyService2>().As<IService>();
}
دقت کنید این تابع بعد از ConfigureServices صدا زده میشود. و شما میتوانید کلاسهای خود را در Autofac یا در IOC تو کار خود دانت نت ثبت و اینجکت نمایید
نکته:💡 حتی در صورت افزودن autofac هنوز هم امکان استفاده از IOC پیشفرض خود dotnet وجود دارد و شما میتوانید کلاسها رو در IOC خود dotnet ثبت و اینجکت کنید. ولی در صورت ثبت در هر دو IOC اولیت با Autofac خواهد بود