2012-08-17 4 views
0

다음 문제 :Spring .NET 생성자가 다른 종속 객체에 의해 생성 된 객체 삽입

RabbitMQ를 사용하여 API에 연결하는 WCF 서비스를 개발 중입니다. 우리는 봄을 DI 컨테이너로 사용합니다.

우리는 소비자 클래스

버전 다운 트림 (토끼 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 속성을 Consumer 생성자에 삽입하려고합니다.

봄 설정 지금까지 (아래 트림) :

<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> 

그래서 내가 여기에 펑키 계십니까 뭔가에 무엇을 배치합니까?

우리는 또한

+0

해결책이 여기에 게시됩니다 http://stackoverflow.com/을 수정할 수 있습니다 다시 소비자 (마지막 옵션)에은 ConnectionManager를 주입 할 수 질문/6739899/spring-net-propertyretrievingfactoryobject-property-is-null. SpEL에서 'PropertyRetrievingFactoryObject' 또는 표현식을 사용할 수 있습니다. 문서 : http://www.springframework.net/doc-latest/reference/html/objects.html#objects-advancedproperty-setting – Andreas

답변

2

당신은은 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(); 
    } 

    public IModel GetChannel() 
    { 
    return Channel; 
    } 
} 
<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> 
     <object factory-object="connectionManager" factory-method="GetChannel" /> 
     </constructor-arg> 
    </object> 
</spring>