web-dev-qa-db-ja.com

.NET CoreでのNinject

Ninject 3.3.2を2016年5月にリリースされた.NET Coreにインストールしようとしています。誰かが同様の問題を抱えていましたか?これには解決策がありますか?

15
Dejan Dimčić

Ninjectは.NET Coreをサポートしていません。あなたはそれをサポートするバージョンがないかどうかを確認するためにそのウェブサイトをチェックすることができます。

ASP.NET Coreには、独自のDependency Injectionコンテナーが組み込まれています。 here を参照してください。

Ninject3.3.0 2017年9月26日リリースされ、現在ターゲット。NET Standard 2.0 、したがって。NET Core 2.0でも実行されます。

一連のことから(GitHubの問題/議論を参照)、4.0-betaの変更の一部が元に戻される可能性があります。まもなく4.0の最終版は期待していませんでした。したがって、現在のバージョン3リリースを使用することをお勧めします。

31

追加したかっただけです。 ASP.Netコアは組み込みの依存関係注入を提供するという点で、上記の両方の答えは正しいですが、より高度なシナリオには十分ではありません。 Ninject、AutoFac、Unity、またはStructureMapがサポートする機能のホスト全体をサポートしていないため。

現在、.netコアを完全にサポートしていることを認識している唯一のDIライブラリはAutoFacであり、現在は nity も同様です。これを追加するのは非常に簡単です。組み込みのDIを置き換えるために必要なことは、次のとおりです。この例はAutoFac用ですが、Unityでもほとんど同じように見えます。

まず、startup.csのConfigureServicesのvoidを次のようにIServiceProvider(AutoFacからの依存関係)に置き換えます。

public IServiceProvider ConfigureServices(IServiceCollection services)

次に、コンテナビルダーを作成し、ConfigureServicesからIServiceProviderをビルドして解決します。

var builder = new ContainerBuilder();
builder.Populate(services);
var container = builder.Build();
return container.Resolve<IServiceProvider>();

AutoFacモジュールを使用してさまざまな構成を動的にロードおよび構築できるようにするこの2番目の部分のラッパーがあり、GitHubまたは何か興味がある場合は何かにアップロードすることを確信できます。

15
Brandon

Ninjectは.Net Coreをサポートしていません。代わりに、.net Coreの依存性注入を使用できます。実装する手順は次のとおりです。

  1. public void ConfigureServices(IServiceCollection services)のstartup.csに移動します
  2. services.AddTransient<Interface, Class>();を追加
  3. 依存性注入を適用するコントローラーに移動します。
  4. グローバルprivate Interface _propertyName;
  5. インターフェース型変数を次のようにコンストラクタに渡します
 public Constructor(Interface name)
 {
     _propertyName= name;
 }
  1. これで、_propertyNameを介してクラスのメンバーにアクセスできます。
1
Salman Lone