web-dev-qa-db-ja.com

PARAMETERコンストラクターでregisterTypeを登録する方法は?

タイプにパラメーターコンストラクターがないコンテナーにタイプを登録するにはどうすればよいですか?.

実際、私のコンストラクタは文字列を受け入れ、通常はパスを表す文字列を渡します。

それで解決すると、新しいタイプが自動的に作成されますが、文字列が渡されますか?

34
Martin

それは簡単です。コンストラクターを登録するときは、パラメーターに注入する値を渡すだけです。コンテナーは、値のタイプ(API)またはパラメーターの名前(XML)に基づいてコンストラクターを照合します。

APIでは、次のようにします。

container.RegisterType<MyType>(new InjectionConstructor("My string here"));

これにより、単一の文字列を取るコンストラクターが選択され、解決時に文字列「My string here」が渡されます。

同等のXML(2.0構成スキーマを使用)は次のようになります。

<register type="MyType">
  <constructor>
    <param name="whateverParameterNameIs" value="My string here" />
  </constructor>
</register>
60
Chris Tavares

組み込みのInjectionConstructorおよびResolvedParameterを使用することもできます。ここで、connectionStringは、使用するデータベース接続文字列です。

// install a named string that holds the connection string to use
container.RegisterInstance<string>("MyConnectionString", connectionString, new ContainerControlledLifetimeManager()); 

// register the class that will use the connection string
container.RegisterType<MyNamespace.MyObjectContext, MyNamespace.MyObjectContext>(new InjectionConstructor(new ResolvedParameter<string>("MyConnectionString")));

var context = container.Resolve<MyNamespace.MyObjectContext>();

さらに一歩踏み込んで、それぞれが異なるデータベースへの独自の接続文字列を使用して、MyObjectContextの複数の名前付きインスタンスを持つことができます。

17
Brad