私はコンストラクタを持っています
Foo(IColor c , int someNumber)
そして、実行時にのみいくつかの数値を知っています。解決中にこのコンストラクターを呼び出して、someNumber
値を渡し、IColor
独裁的に解決されるようにしたいと考えています。
このようなもの:
container.Resolve<IFoo>(someNumber);
できますか?
私はコンストラクタを持っています
Foo(IColor c , int someNumber)
そして、実行時にのみいくつかの数値を知っています。解決中にこのコンストラクターを呼び出して、someNumber
値を渡し、IColor
独裁的に解決されるようにしたいと考えています。
このようなもの:
container.Resolve<IFoo>(someNumber);
できますか?
サービスロケーターのようなコンテナーを使用するのではなく、TypedFactoryを使用することをお勧めします。ファクトリインターフェイスを定義するだけです。
public interface IFooFactory {
IFoo Create(int somenumber);
}
タイプされたファクトリとして登録します。
container.Register(Component.For<IFooFactory>().AsFactory());
次に、依存性注入を使用してファクトリを注入し、それを使用します。
var foo = fooFactory.Create(desiredArgumentValue);
詳細については、 Windsorのドキュメントをお読みください
はい、匿名型のインスタンスでコンストラクター引数を渡します。プロパティ名は、コンストラクターのパラメーター名と一致する必要があります。
IColor desiredColor = //whatever
int desiredNumber = //whatever else
IFoo foo = container.Resolve<IFoo>(new { c = desiredColor, somenumber = desiredArgumentValue });
匿名型をサポートしていない古いバージョンの C# を使用している場合 (またはそうでない場合でも)、辞書を使用して同じことを行うことができます。
IColor desiredColor = //whatever
int desiredNumber = //whatever
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("c", desiredColor);
arguments.Add("somenumber", desiredNumber);
IFoo foo = container.Resolve<IFoo>(arguments);