zoukankan      html  css  js  c++  java
  • ASP.NET Core-使用Autofac替换Core中自带的DI

     使用Autofac替换Core中自带的DI

    Autofac比Core中自带的DI功能强大的多,比如:属性注入、基于名称注入、子容器、自定生存期管理、迟缓初始化……

    nuget安装Autofac 、 Autofac.Extensions.DependencyInjection

    Core2.0中使用方法:

    将Startup.cs中的ConfigureServices返回类型改为IServiceProvider,然后新起一个方法RegisterAutofac把创建容器的代码放到其中

    public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
                return RegisterAutofac(services);//注册Autofac
            }
    private IServiceProvider RegisterAutofac(IServiceCollection services)
            {
        services.AddAutofac();
    //实例化Autofac容器 var builder = new ContainerBuilder(); //将Services中的服务填充到Autofac中 builder.Populate(services); //新模块组件注册 //builder.RegisterModule<AutofacModuleRegister>(); //创建容器 var Container = builder.Build(); //第三方IOC接管 core内置DI容器 return new AutofacServiceProvider(Container); }

    以上是Core2.0替换方法,Core3.0不适用

    Core 3.0版本替换方法: 

    .NET Core 3.0 引入了具有强类型容器配置的功能。它提供了ConfigureContainer 方法,您可以在其中使用Autofac来注册事物,而不必通过  ServiceCollection 来注册事物。

      首先我们需要在 Program.cs 中修改服务工厂,内置是  ServiceProviderFactory 的,我们将要指定为: AutofacServiceProviderFactory

     public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })
           .UseServiceProviderFactory(new AutofacServiceProviderFactory());

     现在需要在 Startup.cs 中添加方法 ConfigureContainer ,并添加以下代码。

    public void ConfigureContainer(ContainerBuilder builder)
            {
            }

     然后大功告成,启动再也没问题了~。

    替换完了。现在可以同时使用IServiceProvider、ILifetimeScope解析服务。

    在ConfigureService中如何解析服务:

     ServiceProvider serviceProvider = services.BuildServiceProvider();//通过ServiceCollection创建ServiceProvider,用ServiceProvider解析服务

     

    未完待续...

  • 相关阅读:
    给RArray和CArray加上自己的泛型算法(转)
    由电话号码得到姓名(转)
    在Eclipse中用TODO标签管理任务(转)
    Symbian_C++:Multipart/formdata(转)
    Symbian源代码还原之一,二,三,四,五(转)
    使用Carbide C++进行ODD(On Device Debugging)(转)
    S60_Platform_and_device_identification_codes(转)
    S60 3rd中怎么设置字体类型与字体大小!!!!!(转)
    诺基亚10.22变革影响的分析(转)
    MeeGo软件架构综述(转)
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12144837.html
Copyright © 2011-2022 走看看