小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

NET Core 3.0 項目中使用 AutoFac

 小樣樣樣樣樣樣 2020-05-02

.net core 3.1 今天已正式發(fā)布,3.1跟3.0差別不是很大,主要是對 3.0一小部分修復和完善,最重要的是.NET Core 3.1是長期支持(LTS)版本,建議大家升級。

.net core 2.2 這個月就要停止維護,并且微軟將不再提供支持,如果你在使用 2.2 ,建議升級到 3.1,可以先升級到3.0,可以參考文檔:

ASP.NET Core 2.2 遷移到3.0:https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio

如果在使用 2.1,可以暫時不用著急升級,2.1也是 LTS 版本

ASP.NET Core 3.0的新增功能:https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-3.0

替換AutoFac服務(wù)

在 .Net Core 3.0 之前的時候,返回一個 IServiceProvider 注入到ConfigureServices服務(wù)中。

用 .Net Core 3.0 框架運行之后會報錯:ConfigureServices returning an System.IServiceProvider isn't supported.

找文檔之后發(fā)現(xiàn) 3.0 中 ConfigureServices 已經(jīng)不支持返回 IServiceProvider 。

.Net Core 2.2的寫法

        /// <summary>
        /// //負責注入服務(wù)
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            //初始化容器
            var builder = new ContainerBuilder();
            //管道寄居
            builder.Populate(services);
            //業(yè)務(wù)邏輯層所在程序集命名空間
            Assembly service = Assembly.Load("NetCoreDemo.Service");
            //接口層所在程序集命名空間
            Assembly repository = Assembly.Load("NetCoreDemo.Repository");
            //自動注入
            builder.RegisterAssemblyTypes(service, repository)
                .Where(t => t.Name.EndsWith("Service"))
                .AsImplementedInterfaces();
            //注冊倉儲,所有IRepository接口到Repository的映射
            builder.RegisterGeneric(typeof(Repository<>))
                //InstancePerDependency:默認模式,每次調(diào)用,都會重新實例化對象;每次請求都創(chuàng)建一個新的對象;
                .As(typeof(IRepository<>)).InstancePerDependency();
            //構(gòu)造
            ApplicationContainer = builder.Build();
            //將AutoFac反饋到管道中
            return new AutofacServiceProvider(ApplicationContainer);
        }

.Net Core 3.0的寫法

修改 Program.cs 將默認ServiceProviderFactory指定為AutofacServiceProviderFactory

    public class Program
    {
        public static void Main(string[] args)
        { 
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                 //將默認ServiceProviderFactory指定為AutofacServiceProviderFactory
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://*:8004");
                });
    }

然后在 Startup.cs 中添加 ConfigureContainer 方法

使用ConfigureContainer訪問Autofac容器生成器,并直接向Autofac注冊。

        public void ConfigureContainer(ContainerBuilder builder)
        {
            //業(yè)務(wù)邏輯層所在程序集命名空間
            Assembly service = Assembly.Load("NetCoreDemo.Service");
            //接口層所在程序集命名空間
            Assembly repository = Assembly.Load("NetCoreDemo.Repository");
            //自動注入
            builder.RegisterAssemblyTypes(service, repository)
                .Where(t => t.Name.EndsWith("Service"))
                .AsImplementedInterfaces();
            //注冊倉儲,所有IRepository接口到Repository的映射
            builder.RegisterGeneric(typeof(Repository<>))
                //InstancePerDependency:默認模式,每次調(diào)用,都會重新實例化對象;每次請求都創(chuàng)建一個新的對象;
                .As(typeof(IRepository<>)).InstancePerDependency();
        }

參考:https://docs./en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多