2017-09-08 4 views
2

私はちょうど.net core(1.1)を使って新しいプロジェクトを開始しており、DIコンテナを使ってサブアセンブリにサービスを登録したいと考えています。以前のプロジェクトでは、具体的なクラスが存在するアセンブリにサービスを登録しました。これにより、私はパブリックインターフェイスを持つことができますが、プライベート(または内部)の実装を持つことができます。Dotnet CoreはComposition Root discoveryを実装していますか?

私は、これを実装する方法が.netコアでは見当たりません。

AutoFacはモジュールを使用し、NinjectはNinjectModuleを使用し、LightInjectはICompositionRootを使用します.netフレームにequivilentがあります(DIフレームワークを代用しません)。

+0

内部実装を使用して達成しようとしていることは何ですか? – Steven

+0

アセンブリの外側に具体的な実装を公開する必要はありません。 – Neil

+0

これらを非表示にする必要はありません。 – Steven

答えて

0

AutofacやCastle Windsorのようなモジュールはありません。あなただけのアプリケーションで

public static IServiceCollection AddMyServices(this IServiceCollection c) 
{ 
    c.Register<IPublicInterface,IInternalImplementation>(); 
} 

なりますように拡張メソッドを公開

あなたは内部実装を持つようにしたいアセンブリからインポートMicrosoft.Extensions.DependencyInjectionを行うことができるかもしれないとConfigureServicesでAddMyServicesを呼び出すと、そのアセンブリへの内部クラスは表示されません。

これは単なるアイデアですが、試していません。また、あなたがDIで気に入っていれば、簡単にオートファックを接続することができます。あなたが内蔵されたDIから手に入れない多くのオートファックのオファーがあり、それが大きなアプリなら、それが必要になるまで時間がかかりません。

関連する問題