9

私はコンストラクタを持っています

Foo(IColor c , int someNumber)

そして、実行時にのみいくつかの数値を知っています。解決中にこのコンストラクターを呼び出して、someNumber値を渡し、IColor独裁的に解決されるようにしたいと考えています。

このようなもの:

container.Resolve<IFoo>(someNumber);

できますか?

4

2 に答える 2

18

サービスロケーターのようなコンテナーを使用するのではなく、TypedFactoryを使用することをお勧めします。ファクトリインターフェイスを定義するだけです。

public interface IFooFactory {
    IFoo Create(int somenumber);
}

タイプされたファクトリとして登録します。

container.Register(Component.For<IFooFactory>().AsFactory());

次に、依存性注入を使用してファクトリを注入し、それを使用します。

var foo = fooFactory.Create(desiredArgumentValue);

詳細については、 Windsorのドキュメントをお読みください

于 2012-07-31T06:52:24.283 に答える
10

はい、匿名型のインスタンスでコンストラクター引数を渡します。プロパティ名は、コンストラクターのパラメーター名と一致する必要があります。

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);
于 2012-07-30T17:57:07.027 に答える