ASP.NET Core Dependency Injectionフレームワークの活用
まえがき
前回の記事を思い出してください ASP.NET Core Dependency Injectionの詳細について 最後に、増え続けるサービスにどう対処するかが述べられていましたが、今回はその解決策をお届けします。この記事は前回の記事の続きなので、考え方は前回の記事を参考にしてください。
I. IoCフレームワーク
まずは一般的なIocフレームワークから見ていきましょう。
Autofac.
現在
net
より多く使用され、多くの兄のプロジェクトは、より好ましいフレームワークです。
Ninject.
今はもうほとんど使われていませんが、ごく初期の記事で見たことがあります。
Unity.
多くの場所で使用されている、より一般的なものは
Core: Core
はCore /codeに付属しているので、ビジネスロジックがあまり複雑でない場合は、やはり便利です。
II. IoC-Autofac
Autofac
は
NET
ドメインで最も人気のある
IOC
フレームワークで、最も高速なものの1つであるという伝説があります。
長所
-
C#言語と非常に密接に連携しているため、C#の多くのプログラミングスタイルが
Autofac
を使用することができます。 -
は学習曲線が低く、一度理解すればとても簡単に習得できます。
IoC
やDIの概念を、どのような時に使うのか。 -
XML.Json
コンフィギュレーション対応。 - 自動組立。
-
と同じです。
Asp.Net MVC
を統合する。 -
マイクロソフトの
Orchad
オープンソース・プログラムではAutofac
と、その便利さと威力をソースコードでご紹介しています。
ほとんどの人が話す
Autofac
は、ほとんどの記事で言及されており、フレームワークの優秀さを示しています。
NET CoreはDIの利用が前提
{NET Core. 1. まず {NET Core Web Api ASP.Net Core Web Api .NET 5.0のプロジェクトで、全体は以下のようになっており、赤字の部分がCoreのDIに付属している部分です。
2. クラスライブラリプロジェクトを新規に作成し、インターフェイスファイルとクラスファイルをそれぞれ追加します。
インターフェイスです。
public interface ISayHelloService
{
string SayHello(string name);
}
クラスがあります。
public class EnglishSayHelloService : ISayHelloService
{
public string SayHello(string name)
{
return $"Hello,{name}! ";
}
}
3. で
Startup
の中にある
ConfigureServices
メソッドが注入されます。
services.AddScoped<ISayHelloService, EnglishSayHelloService>();
4. そして、先ほど注入したサービスをコントローラで使用します。
[Route("api/[controller]/[action]")]
[ApiController]
public class HelloController : ControllerBase
{
public readonly ISayHelloService sayHelloService;
public HelloController(ISayHelloService sayHelloService)
{
this.sayHelloService = sayHelloService;
}
[HttpGet]
public string CoreDI()
{
return sayHelloService.SayHello("CoreDI");
}
}
注意 ルーティングアクセスアドレス、404エラーがある場合、それはルーティングの問題かもしれません、ルートは、実際のニーズに応じて自分で[Route("api/[コントローラ]/[アクション]")]を修正することができます。
5. アクセステスト
ここで使用したインターフェーステストソフトウェアは
Postman
Apiテストは非常に便利で、オンラインで検索することができます、あなたがに私を見つけることができない場合は、私に連絡することができます。
四、オートファックの使用
1. 新しい
ASP.Net Core Web Api
.NET 5.0)プロジェクトと区別するために、以前のCore自己完結型のDIを作成しました。
2.引用引用
Autofac
パッケージ、ダウンロード数を見てみると、やはり非常にワオ
3. で
Program
の中に
Autofac
依存性注入を実装するために
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
4.
Startup クラスに以下のメソッドを追加します。
ConfigureContainer
で、以前のサービスをインジェクトします。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
// Injected here
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterType<EnglishSayHelloService>().As<ISayHelloService>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
5. コントローラは基本的にここで変更する必要はありません。
[Route("api/[controller]/[action]")]
[ApiController]
public class HelloController : ControllerBase
{
public readonly ISayHelloService sayHelloService;
public HelloController(ISayHelloService sayHelloService)
{
this.sayHelloService = sayHelloService;
}
[HttpGet]
public string CoreDI()
{
return sayHelloService.SayHello("AutofacDI");
}
}
6. プロジェクトを実行し、Postmanとのインターフェースのテストを続けます。
について
Autofac
は、やはりかなりシンプルですね。
V. バルクインジェクション
簡単なサービスを数個書くだけならまだしも、数十個、数百個となると、考えるのも怖いくらいです。そこで、オートファックの利点が発揮されるのがバルクインジェクションです。
1. サービスにインターフェイス、クラスをそれぞれ追加する。
インターフェイスを使用します。
public interface IUseAutofacService
{
string UseAutofac(string name);
}
クラスがあります。
public class UseAutofacService : IUseAutofacService
{
public string UseAutofac(string name)
{
return $"{name} batch injection test! ";
}
}
2. 前回のStartupクラスに戻り、メソッドを修正します。
ConfigureContainer
.
public void ConfigureContainer(ContainerBuilder builder)
{
//builder.RegisterType<EnglishSayHelloService>().As<ISayHelloService>();
// Service project assembly
Assembly service = Assembly.Load("Autofac.Service");
//Service interface project assembly
Assembly iservice = Assembly.Load("Autofac.Service");
builder.RegisterAssemblyTypes(service, iservice).Where(n => n.FullName.EndsWith("Service") && !n.IsAbstract)
.InstancePerLifetimeScope().AsImplementedInterfaces();
}
注意
注入されるサービスに
IXXXService
インターフェイスを使用する場合
builder.RegisterAssemblyTypes
の場合、アセンブリを1つだけ渡す必要があります。もしサービスがインターフェースと同じプロジェクトにある場合は、2つのアセンブリを渡す必要もあります。
3. 次に、先ほど作成したコントローラを少し変更します。
[Route("api/[controller]/[action]")]
[ApiController]
public class HelloController : ControllerBase
{
public readonly ISayHelloService sayHelloService;
public readonly IUseAutofacService useAutofacService;
public HelloController(ISayHelloService _sayHelloServ
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonでpillowをインストールする3つの方法
-
.NET複数データベース一括データ挿入、更新(SqlServer、MySql、PgSql、Oracleをサポートします。)
-
.NET Coreでオブジェクトプールを使用する
-
net core downlink tracking skywalking インストールと使いやすいチュートリアル
-
ネットのメモリ管理に関する5つの基本
-
ASP.NET学習でよくあるエラーのまとめ
-
Application_End イベントをブロックする解決策
-
CS0234 名前空間 'Microsoft.AspNet' に型または名前空間名 'Mvc' が存在しない (あなたは
-
ASP.NETのオンライン統計とアプリケーションとセッションを使用した訪問履歴
-
ASP.NETでのRadioButton(ラジオボタン)の使用について