プロジェクトAutoFacで使用NETコア3.0

まだネットCore3.0停止メンテナンスにゆっくりと古いバージョンを意味し、.NETのコア3.1リリース、など大きな違い、とネットコア2.xの。

ネットコア3.0は、私たちが手を実践するために、実際の移行バージョンです。

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

ASP.NETコア3.0の新機能:https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-3.0

AutoFacサービスを交換します

ネットコアは、リターンIServiceProviderはConfigureServicesサービスに注入3.0より前。

文句を言うでしょう。ネットコア3.0 Frameworkランタイムを使用した後:System.IServiceProviderを返すConfigureServicesはサポートされていません。

探している文書は3.0 ConfigureServicesを見つけた後は、もはやリターンIServiceProviderをサポートしていません。

純コア2.2言葉遣い

        ///  <要約> 
        /// //负责注入服务
         ///  </要約> 
        ///  ます。<param name = "サービス"> </ param>の
        ///  <リターン> </リターン> 
        公共IServiceProvider ConfigureServices( IServiceCollectionサービス)
        {
            // 初期化コンテナ
            VARビルダー= 新しい新ContainerBuilder();
             // 滞在パイプ
            builder.Populate(サービス);
             // ビジネスロジックアセンブリの名前空間プログラム 
            総会はAssembly.Load・サービス(= NetCoreDemo.Serviceを);
             // インターフェイスプログラム層は、アセンブリの名前空間ここ 
            アセンブリAssembly.Load =(リポジトリNetCoreDemo.Repositoryを);
             // 自動インジェクタ
            builder.RegisterAssemblyTypes(サービスリポジトリ)
                .Where(トン => t.Name.EndsWith(" サービス" ))
                .AsImplementedInterfaces()。
            // 登録倉庫、全てIRepositoryリポジトリインタフェースはマップに 
            builder.RegisterGeneric(typeof演算(リポジトリ<> ))
                 // InstancePerDependency:デフォルトモードは、各コールは、オブジェクトのインスタンス化を再う;要求ごとに新しいオブジェクトを作成します。 
                .as(typeof演算(IRepository <> )。)InstancePerDependency();
             // 構成される 
            ApplicationContainer = builder.Build();
             // 導管にフィードバックさAutoFacに
            戻り 、新たな新しいAutofacServiceProvider(ApplicationContainer)。
        }

純コア3.0言葉遣い

変更  のProgram.csの  AutofacServiceProviderFactoryとして指定されたデフォルトのServiceProviderFactory

    パブリック クラスプログラム
    {
        公共の 静的な 無効メイン(文字列[] argsを)
        { 
            CreateHostBuilder(引数).Build()を実行します()。
        }

        パブリック 静的 IHostBuilder CreateHostBuilder(文字列 []引数)=>
            Host.CreateDefaultBuilder(引数)
                 // AutofacServiceProviderFactoryとして指定されたデフォルトのServiceProviderFactory 
                .UseServiceProviderFactory(新新AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup <起動時> ();
                    webBuilder.UseUrls(" のhttp:// *:8004 " );
                });
    }

その後  Startup.csは  で追加  ConfigureContainer  方法

使用ConfigureContainerアクセス​​Autofacコンテナジェネレータは、とAutofacに直接登録します。

        公共 のボイドConfigureContainer(ContainerBuilderビルダー)
        {
            // ビジネスロジックが存在アセンブリ名前空間 
            アセンブリはAssembly.Load・サービス(= NetCoreDemo.Serviceを);
             // ここで、プログラム・インターフェース層アセンブリ名前空間 
            アセンブリリポジトリAssembly.Load =(NetCoreDemo.Repository );
             // 自動的に射出
            builder.RegisterAssemblyTypes(サービス、リポジトリ)
                .Where(トン => t.Name.EndsWith(" サービス" ))
                .AsImplementedInterfaces()。
            // 登録倉庫、全てIRepositoryリポジトリインタフェースはマップに 
            builder.RegisterGeneric(typeof演算(リポジトリ<> ))
                 // InstancePerDependency:デフォルトモードは、各コールは、オブジェクトのインスタンス化を再う;要求ごとに新しいオブジェクトを作成します。 
                .as(typeof演算(IRepository <> )。)InstancePerDependency();
        }

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

おすすめ

転載: www.cnblogs.com/tenghao510/p/11984473.html