编程语言
首页 > 编程语言> > c# – 使用StructureMap注入相同的实例

c# – 使用StructureMap注入相同的实例

作者:互联网

我有一个接口IConnection,由TcpConnection实现.另外,两个类接受IConnection作为参数,我想为此使用相同的TcpConnection实例.

问题是它似乎不起作用.我尝试过的每一种方法都不止一次创建了TcpConnection.这是我正在使用的Registry子类:

public class InstanceRegistry : Registry
{
    public InstanceRegistry()
    {
        var connection = 
            For<IConnection>.Add<TcpConnection>.
            Named("Connection"); // ...and additional configuration

        For<IFoo>.Add<Foo>.
            // Ctor<IConnection>.Is(connection);  // Did not work
            Ctor<IConnection>.Is( i => i.GetInstance<IConnection>("Connection") );                

        For<IBar>.Add<Bar>.
            // Ctor<IConnection>.Is(connection);  // Did not work
            Ctor<IConnection>.Is( i => i.GetInstance<IConnection>("Connection") );
    }
}

我甚至尝试将IConnection声明为Singleton(“For<>().Singleton()”),但这也没有帮助.我正在使用StructureMap 2.6.1.

有任何想法吗?

解决方法:

For<IConnection>().Singleton().Add<TcpConnection>().Named("Connection");
For<IFoo>().Add<Foo>().Ctor<IConnection>().Is(i=>i.GetInstance<IConnection>("Connection"));
For<IBar>().Add<Bar>().Ctor<IConnection>().Is(i=>i.GetInstance<IConnection>("Connection"));

当我使用上面的代码时,我在Foo和Bar中有相同的连接实例.我也厌倦了几个命名连接. Foo和Bar仍然可以得到他们想要的连接.

标签:c,scope,dependency-injection,inversion-of-control,structuremap
来源: https://codeday.me/bug/20190626/1295439.html