0

私はウィンザーが初めてで、最も基本的なコンストラクター注入を実装しようとしています。どうやら API は最近のバージョンで大幅に変更されたため、現在のバージョンのドキュメントは、その方法を既に知っていると想定しているようで、古いバージョンのドキュメントは古くなっています。

私は単純なテストコンポーネントを持っています:

public class ConstructorInjectedComponent
{   
    public IMyComponent Component { get; set; }

    public ConstructorInjectedComponent(IMyComponent component)
    {
        Component = component;
    }
}

IMyComponent の簡単な実装があります。

public class AMyComponent : IMyComponent
{
    public string Name { get; set; }

    public AMyComponent()
    {
        Name = Guid.NewGuid().ToString("N");
    }
}

そして、依存関係のインスタンス IMyComponent を含む ConstructorInjectedComponent のインスタンスを取得できるように、何らかの方法で自分の型を Windsor に登録したいと考えています。

AMyComponent を次のように登録しました。

_container.Register(Component.For(typeof(AMyComponent)));

次のように ConstructorInjectedComponent を登録しました。

_container.Register(Component.For(typeof(ConstructorInjectedComponent)));

そしてそれを解決しようとしました

_container.Resolve(typeof(ConstructorInjectedComponent));

しかし、それは「満たさなければならない依存関係があるため、コンポーネント ConstructorInjectedComponent を作成できません。

だから私は ConstructorInjectedComponent の依存関係の IDictionary を渡そうとします...そしてこれがドキュメントが私に失敗するところです。

その辞書を定義する方法がわかりません。それを説明するドキュメントが見つかりません。私はこれを試しました:

var d = new Dictionary<string, string>() {{"IMyComponent", "AMyComponent"}};
_container.Register(Component.For(typeof(ConstructorInjectedComponent))
                    .DependsOn(dependencies));

しかし、それは同じ「解決する必要がある依存関係があります」というエラーで失敗します。

私は何を間違っていますか?

4

1 に答える 1

6

まず、基本的な概念、つまりコンポーネントとは何か、サービスとは何か、依存関係とは何かを確実に理解することが重要です。

それに関するドキュメントは非常に優れています。

登録 APIの使用方法に関するドキュメントは、作業を開始するのに役立ちます。

tl;dr asnwer は次のとおりです。依存するため、サービスとして公開するよう に登録ConstructorInjectedComponentIMyComponentAMyComponentIMyComponentしてください。

_container.Register(Component.For<IMyComponent>().ImplementedBy<AMyComponent>());
于 2012-05-11T03:32:29.520 に答える