Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 由其他依赖项创建的对象的Spring.NET构造函数注入_C# 4.0_Spring.net_Constructor Injection - Fatal编程技术网

C# 4.0 由其他依赖项创建的对象的Spring.NET构造函数注入

C# 4.0 由其他依赖项创建的对象的Spring.NET构造函数注入,c#-4.0,spring.net,constructor-injection,C# 4.0,Spring.net,Constructor Injection,以下问题: 我正在开发一个WCF服务,它使用RabbitMQ连接到API。我们使用spring作为DI容器 我们创建了一个消费者类(一些用于rabbit MQ+日志记录的自定义逻辑) 精简版: public class Consumer : DefaultBasicConsumer { public Consumer(IModel channel) : base(channel) {} } 我们有一个ConnectionManager类: p

以下问题:

我正在开发一个WCF服务,它使用RabbitMQ连接到API。我们使用spring作为DI容器

我们创建了一个消费者类(一些用于rabbit MQ+日志记录的自定义逻辑)

精简版:


public class Consumer : DefaultBasicConsumer
{
    public Consumer(IModel channel)
            : base(channel)
        {}
}
我们有一个ConnectionManager类:


public class ConnectionManager
{
    public IModel Channel { get; set; }
    public IConnection Connection { get; set; }

    private readonly ConnectionFactory _connectionFactory;

    public ConnectionManager()
    {
        _connectionFactory = SetupConnectionFactory();

        Connection = _connectionFactory.CreateConnection();
        Channel = Connection.CreateModel();
    }
}
现在问题来了,当使用Spring.NET连接所有东西时。我们希望将ConnectionManager类的Channel属性注入使用者构造函数。

到目前为止的弹簧配置(精简):


那么,我该把什么放在“做些时髦的事”这个词上呢?


我们还可以重写ConnectionManager并将其注入使用者(最后一个选项)

您可以修改ConnectionManager

公共类连接管理器
{
公共IModel通道{get;set;}
公共IConnection连接{get;set;}
私有只读连接工厂\u连接工厂;
公共连接管理器()
{
_connectionFactory=设置connectionFactory();
Connection=_connectionFactory.CreateConnection();
Channel=Connection.CreateModel();
}
公共IModel GetChannel()
{
返回通道;
}
}

此处发布了一个解决方案。您可以使用
PropertyRetrievingFactoryObject
或SpEL中的表达式。文档:
 <spring>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <object name="connectionManager" type="Epex.ConnectionManager, EpexData" singleton="true"/>

    <object name="consumer" type="Epex.Consumer, EpexData">
      <constructor-arg ref="Do something funky here"/>
    </object>
</spring>