私は型付きファクトリの実装で遊んでいて、型付きファクトリに関する城のページを読んでいます。構造パラメータを汎用型ファクトリに渡す方法を知りたいです。
public interface IFacilityFactory {
IFacility<T> Create<T>(); // how to pass some parameter(s) to any T constructor?
}
指示をお願いします。どうもありがとうございます。
私は型付きファクトリの実装で遊んでいて、型付きファクトリに関する城のページを読んでいます。構造パラメータを汎用型ファクトリに渡す方法を知りたいです。
public interface IFacilityFactory {
IFacility<T> Create<T>(); // how to pass some parameter(s) to any T constructor?
}
指示をお願いします。どうもありがとうございます。
ジェネリック型パラメーター「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以外のタイプでは冗長になる可能性があります。