public interface IInterface1
{
}
public interface IInterface2
{
}
public class MyClass : IInterface1, IInterface2
{
}
...
ObjectFactory.Initialize(x =>
{
x.For<IInterface1>().Singleton().Use<MyClass>();
x.For<IInterface2>().Singleton().Use<MyClass>();
});
var x = ObjectFactory.GetInstance<IInterface1>();
var y = ObjectFactory.GetInstance<IInterface2>();
上記のコードで2つの異なるMyClassインスタンスを取得します。どうすれば入手できますか?
Forward <、>()登録を使用して、別のタイプの解決を使用してタイプを解決するようにStructureMapに指示できます。これはあなたが期待することをするはずです:
ObjectFactory.Initialize(x =>
{
x.For<IInterface1>().Singleton().Use<MyClass>();
x.Forward<IInterface1, IInterface2>();
});
MyClass自体を登録し、それを個々のインターフェイスのUseステートメントのコンテキストから引き出します。
ForSingletonOf<MyClass>().Use<MyClass>();
For<IInterface1>().Use(ctx => ctx.GetInstance<MyClass>());
For<IInterface2>().Use(ctx => ctx.GetInstance<MyClass>());
使用するさまざまなオーバーロード、特にFuncオーバーロードを調べてみてください。そこから、StructureMapがすでに登録されている別のオブジェクトを使用してインスタンスを作成する方法を知ることができます。