C# 4.0 由其他依赖项创建的对象的Spring.NET构造函数注入
以下问题: 我正在开发一个WCF服务,它使用RabbitMQ连接到API。我们使用spring作为DI容器 我们创建了一个消费者类(一些用于rabbit MQ+日志记录的自定义逻辑) 精简版: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
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>