まだネット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