4

TypeAというタイプがあります。

TypeA は IOne と ITwo の 2 つのインターフェイスを実装します。

public class TypeA : IOne, ITwo
{
    public TypeA(IThree ithree)
    {
         ...
    }
}

スレッドごとに TypeA のインスタンスが 1 つだけになるように StructureMap を構成したいと考えています。IOne または ITwo のいずれかの解決で、TypeA の同じインスタンス (スレッドごとに 1 つ) が返されるようにします。

次の設定を試しました:

ObjectFactory.Configure(x =>
{
    var thread = Lifecycles.GetLifecycle(InstanceScope.ThreadLocal);
    x.For<TypeA>().LifecycleIs(thread).Use<TypeA>();
    x.For<IOne>().LifecycleIs(thread).Use<TypeA>();
    x.For<ITwo>().LifecycleIs(thread).Use<TypeA>();
    x.For<IThree>().LifecycleIs(thread).Use<TypeB>();
});

そして、このように解決します

var test = ObjectFactory.GetInstance<IOne>();
var test2 = ObjectFactory.GetInstance<ITwo>();

ただし、これら 2 つの呼び出しは異なるオブジェクトに解決されます。

まず、StructureMap を使用して達成しようとしていることは可能ですか? もしそうなら、どうすればいいですか?

4

1 に答える 1

1
For<IOne>().LifecycleIs(thread).Use<Impl>();
For<ITwo>().LifecycleIs(thread).Use(x => x.GetInstance<IOne>() as Impl);

コメントへの回答:

For<Impl>().LifecycleIs(thread).Use<Impl>();
For<IOne>().LifecycleIs(thread).Use(x => x.GetInstance<Impl>());
For<ITwo>().LifecycleIs(thread).Use(x => x.GetInstance<Impl>());

これはあなたが望むことをします。私の個人的な意見では、StructureMap の構成を制御しているため、オブジェクト (ITwo) を要求すると null 以外の値が返され、最初の構成は問題ないと想定できます。それは好みの問題です。

于 2013-03-06T18:38:14.287 に答える