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