web-dev-qa-db-ja.com

StructureMapシングルトンの使用法(2つのインターフェイスを実装するクラス)

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インスタンスを取得します。どうすれば入手できますか?

36
James

Forward <、>()登録を使用して、別のタイプの解決を使用してタイプを解決するようにStructureMapに指示できます。これはあなたが期待することをするはずです:

ObjectFactory.Initialize(x =>
{
    x.For<IInterface1>().Singleton().Use<MyClass>();
    x.Forward<IInterface1, IInterface2>();
});
53
Joshua Flanagan

MyClass自体を登録し、それを個々のインターフェイスのUseステートメントのコンテキストから引き出します。

ForSingletonOf<MyClass>().Use<MyClass>();

For<IInterface1>().Use(ctx => ctx.GetInstance<MyClass>());
For<IInterface2>().Use(ctx => ctx.GetInstance<MyClass>());
13
Chris Marisic

使用するさまざまなオーバーロード、特にFuncオーバーロードを調べてみてください。そこから、StructureMapがすでに登録されている別のオブジェクトを使用してインスタンスを作成する方法を知ることができます。

1
Kenny Eliasson