c# - 使用 StructureMap 注入(inject)相同的实例

标签 c# dependency-injection scope inversion-of-control structuremap

我有一个接口(interface) 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# - 使用 StructureMap 注入(inject)相同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451041/

相关文章:

python - 避免 python 范围错误的策略

linux - 来自子进程的 Bash 编辑值?

c# - 从字符串数组创建更大的字符串

javascript - Touchable Opacity onPress 无法调用函数 - 范围问题?

c# - 转换 c# .Net 中的写入日期

java - 无法 Autowiring 方法

ruby - Rspec:模拟嵌套/依赖注入(inject)对象

php - 访问 Zend Framework 2 中的模块配置

c# - 抑制系统覆盖,Windows Phone 8.1 (Silverlight)

c# - 将文本中的 SQL 返回到 Entity Framework 中的模型