タイプにパラメーターコンストラクターがないコンテナーにタイプを登録するにはどうすればよいですか?.
実際、私のコンストラクタは文字列を受け入れ、通常はパスを表す文字列を渡します。
それで解決すると、新しいタイプが自動的に作成されますが、文字列が渡されますか?
それは簡単です。コンストラクターを登録するときは、パラメーターに注入する値を渡すだけです。コンテナーは、値のタイプ(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>
組み込みの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の複数の名前付きインスタンスを持つことができます。