1

警告:私はウィンザーに本当に慣れていません。

複数のプロジェクトがある1つのソリューションがあります。すべてのインターフェイス(「フレームワーク」という名前)と、それらのインターフェイスへの具体的な実装を保持する他のインターフェイスを含むプロジェクトがあります。Windsorにこれらをバインドさせ、次のようにインターフェイスを解決しようとしています。

他のプロジェクトの1つは「Orders」と呼ばれ、フレームワークプロジェクトで定義されてOrderいる実装するクラスがあります。IOrder2つのプロジェクト間に参照があり、コンパイルされます。

インストーラーを作成した実際のウィンザー呼び出しを持つ別のプロジェクトがあります。

public class CoreInstaller : IWindsorInstaller
  {
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(
          AllTypes.FromAssemblyNamed("Framework"),
          AllTypes.FromAssemblyNamed("Orders")
        );
    }
  }

ウィンザーコンテナを次のようにインスタンス化します。

new WindsorContainer().Install(new CoreInstaller());

解決しようとするIOrderと、次のように失敗します。

Castle.MicroKernel.ComponentNotFoundException:サービスFramework.IOrderをサポートするためのコンポーネントが見つかりませんでした

また、インストール関数でプロジェクトを反転してOrders最初にロードしようとしましたが、同じエラーが発生します。

私を助けることができるWindsorユーザーはいますか?

4

1 に答える 1

1

Windsor にすべての型を取得するように効果的に指示しましたが、それらをどう処理するかはまだ指示していません。登録するタイプと登録するインターフェイスをフィルタリングしない場合は、登録に Pick() メソッドを追加する必要があります。

例えば...

container.Register(
    Classes.FromAssemblyNamed("Framework").Pick(),
    Classes.FromAssemblyNamed("Orders").Pick()
);
于 2012-11-09T20:35:22.487 に答える