2017-11-02 18 views
2

誰かがここで提供される方向ハリル・カルカン(@hikalkan)から発展でした:https://github.com/volosoft/castle-windsor-ms-adapter城ウィンザー女史アダプタコア2.0実装

ORIGINAL - 動作しません - NEWは

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddAutoMapper(); 
     services.AddMvc(); 
     services.AddApiVersioning(); 

     services.AddDbContextPool<CIDMSContext>(options => options.UseSqlServer("")); 
     services.AddScoped<IBuildingRepository, BuildingRepository>(); 
     services.AddScoped<IComponentRepository, ComponentRepository>(); 
    } 

標準のMicrosoft DIを使用して動作します。 Castle.Windsor.MsDependencyInjection

public IServiceProvider ConfigureServices(IServiceCollection services) 
    { 
     services.AddAutoMapper(); 
     services.AddMvc(); 
     services.AddApiVersioning(); 

     services.AddDbContextPool<CIDMSContext>(options => options.UseSqlServer("")); 
     //services.AddScoped<IBuildingRepository, BuildingRepository>(); 
     //services.AddScoped<IComponentRepository, ComponentRepository>(); 

     return WindsorRegistrationHelper.CreateServiceProvider(
      new WindsorContainer(), services); 
    } 

を使用しようと、私はエラーを取得しています:

Unable to resolve service for type '...Repositories.Buildings.IBuildingRepository' while attempting to activate ...Controllers.BuildingController'

私の究極の目標は、DIに私が今までに作成するすべての単一のリポジトリを持っていないことです。コンベンションでキャッスルウィンザーをDIにしたいと思います。 .Net Core 2.0のためにこれを行うための他のオプションがある場合は、それらのオプションも公開しています。

私は、Visual Studio 15.4.1。ネットコア2.0 APIプロジェクトを使用しています。

+0

BuildingControllerのコンストラクタコードを提供してください – itikhomi

+0

誰かがダウン投票の理由を詳しく説明できますか? – Ben

答えて

2

このようなアダプターを使用することをお勧めします。新しい.NET Core DI抽象化の上に優れた(完全に互換性のある)アダプタを作成することは、ほとんどのDIコンテナにとってははるかに簡単な作業であることが証明されています。一部のコンテナは、MicrosoftがDIコンテナを作成した方法と互換性がなく、Windsorは良い例です。

城ウィンザーのメンテナは、このようなアダプタを構築するためにfor quite some timeを試してみましたが、それでもこれについてマイクロソフトと協議した後、マイクロソフトacknowledgedcopy)城ウィンザーは、MSは、容器の世界を見てどのように互換性がありません。

城は、このカテゴリーに入る唯一のコンテナではありません。 Simple Injector、Ninject、Unity、StructureMapなどの新しい.NET Core DI抽象化と互換性がないことが証明されました。実際にはStructureMapにはアダプタがありますが、アダプタは抽象化と100%互換性がありません。ASP.NETコアフレームワークまたはサードパーティのライブラリがその互換性のない動作に依存し始めると、明らかに問題が発生する可能性があります。この時点でそう

は時間に城ウィンザーには互換アダプタが存在しない、と城ウィンザーのメンテナはないdecided yet彼らが必要かどうかさえ適応可能性があります。

しかし、互換性のあるアダプタを使用すると、はまったく問題ありません。です。 Windsorフォーラムhereに記載されているfir3pho3nixxのように、Windsor(および他のコンテナ)は、アダプタを使用せずにASP.NET Coreと簡単に統合できます。基本的には、コードを実行するだけです。

+0

ありがとう!非常によく答えを考え出した。私は今、マイクロソフトのDIを使用すると思う。私は数百のリポジトリを持つつもりだし、そのリストを管理することを避けようとしていましたが、当分の間、私はそれらのリストを使用します。再度、感謝します! – Ben

+1

こんにちは@ベン、私は自分自身を明確にしていないと思う。 Microsoft DIコンテナは、バッチ登録やメンテナンス可能なアプリケーションを作成するために重要なその他の機能をサポートしていないため、合理的なサイズのアプリケーションの場合、Microsoft DI Containerは無用です。私のアドバイスは、利用可能なアダプターがなくても、Castle(または他のサードパーティのOSS DIコンテナ)を使用し続けることです。私が説明したように、**あなたはDIコンテナをASP.NETコアパイプラインに差し込むためにアダプタ**を必要としません。 – Steven

関連する問題