用Autofac替換.net core 內置容器

官方建議使用內置容器,但有些功能並不支持,以下:
  • 屬性注入
  • 基於名稱的注入
  • 子容器
  • 自定義生存期管理
  • Func<T> 支持

因此能夠使用其餘第三方IOC容器,如Autofac,下面爲學習使用記錄html

1、首先準備了一個接口和其實現類ide

public interface ITestService
{
    string ShowMsg();
}

 

複製代碼
public class TestService: ITestService
{
    public string ShowMsg()
    {
        return "test123";
    }
}
複製代碼

 

2、安裝Nuget 包學習

Autofac
Autofac.Extensions.DependencyInjection

 

3、在 Startup.ConfigureServices 中配置容器ui

注:使用第三方容器,Startup.ConfigureServices 必須返回 IServiceProvider。spa

  第一種方式,使用AutofacModule配置文件,原來代碼修改成:.net

複製代碼
public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    // Add Autofac
    var containerBuilder = new ContainerBuilder();
    containerBuilder.RegisterModule<AutofacModule>();
    containerBuilder.Populate(services);
    var container = containerBuilder.Build();
    return new AutofacServiceProvider(container);
}
複製代碼

AutofacModule類如:code

複製代碼
public class AutofacModule: Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<TestService>().As<ITestService>();
     //........... } }
複製代碼

 

  第二種方式htm

Startup.ConfigureServices以下修改對象

複製代碼
public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    // Add Autofac
    var containerBuilder = new ContainerBuilder();
    //containerBuilder.RegisterModule<AutofacModule>();

   //自動註冊該程序集下的全部接口 //netcore_autofac 爲程序集命名空間 //InstancePerLifetimeScope:同一個Lifetime生成的對象是同一個實例 //SingleInstance:單例模式,每次調用,都會使用同一個實例化的對象;每次都用同一個對象; //InstancePerDependency:默認模式,每次調用,都會從新實例化對象;每次請求都建立一個新的對象; containerBuilder.RegisterAssemblyTypes(Assembly.Load("netcore_autofac")).AsImplementedInterfaces().InstancePerLifetimeScope(); containerBuilder.Populate(services); var container = containerBuilder.Build(); return new AutofacServiceProvider(container); }
複製代碼

 

其餘Autofac在.net core 的使用,請參考官方文檔:https://docs.autofac.org/en/latest/integration/aspnetcore.htmlblog

相關文章
相關標籤/搜索