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

     

    未完待续...

  • 相关阅读:
    关于[x/y]一些小想法
    mycat主从读写分离范例
    EOJ 262 润清的烦恼
    mycat server.xml 配置文件详解
    Mongodb in Mycat指南
    牛客网NOIP赛前集训营-普及组(第一场)
    MyCAT分表初体验
    牛客网NOIP赛前集训营-提高组(第一场)
    日期类型的特殊性 -- 日期函数转换
    POJ 1966 Cable TV Network 【经典最小割问题】
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12144837.html
Copyright © 2011-2022 走看看