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解析服务

     

    未完待续...

  • 相关阅读:
    [Codeforces Round #617 (Div. 3)] 题解 A,B,C,D,E1,E2,F
    [Codeforces Round #611 (Div. 3)] C. Friends and Gifts (随机大法好)
    [Hello 2020] D. New Year and Conference (ST表,排序)
    [Hello 2020] C. New Year and Permutation (组合数学)
    Codeforces Beta Round #7 C. Line (扩展欧几里德)
    扩展欧几里德
    Codeforces Round #349 (Div. 2) D. World Tour (最短路)
    HDU 4052 Adding New Machine (线段树+离散化)
    HDU 3265 Posters (线段树+扫描线)(面积并)
    HDU 1828 Picture (线段树+扫描线)(周长并)
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12144837.html
Copyright © 2011-2022 走看看