0

私は型付きファクトリの実装で遊んでいて、型付きファクトリに関する城のページを読んでいます。構造パラメータを汎用型ファクトリに渡す方法を知りたいです。

public interface IFacilityFactory {
  IFacility<T> Create<T>(); // how to pass some parameter(s) to any T constructor?
}

指示をお願いします。どうもありがとうございます。

4

1 に答える 1

2

ジェネリック型パラメーター「T」として使用できる可能性のある型の無制限のセットに対して、コンストラクターパラメーターの共通セットを提供する必要があるため、あまり意味がありません。

しかし、意味はさておき、あなたはそれができると信じています。ファクトリを使用するときにWindsorが実行するResolve()で渡す必要のあるパラメータをファクトリインターフェイスで宣言するだけです。パラメータ名は辞書キーになります。コンテナ自体から解決されるコンストラクタープロパティを宣言する必要はありません。

たとえば、コンテナに登録されたコンポーネントBarと依存クラスFooがあるとします。

public class Foo
{
    // Constructor requires Bar to be resolved from the container
    public Foo(int something, Bar bar, string somethingElse)
    {
       ...
    }
}

ファクトリインターフェイスを宣言します。

public interface IGenericFactory
{
    T Create<T>(int something, string somethingElse)
}

型指定されたファクトリを使用すると、Windsorは2つのパラメーターを通過し、コンテナーから他のパラメーター(bar)を解決します。'something'および'somethingElse'パラメーターは単に辞書にプッシュされ、Windsorはそれらを使用できるかどうかを判断します。もちろん、電話すれば使用できますCreate<Foo>(1, "")が、Foo以外のタイプでは冗長になる可能性があります。

于 2012-07-13T21:33:00.900 に答える