1

次の問題:

RabbitMQを使用してAPIに接続するWCFサービスを開発しています。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プロパティをConsumerコンストラクターに注入します。

これまでのSpring構成(トリミング):

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

では、ここでDo Somethingファンキーに何を配置しますか?

コンシューマーにConnectionManagerを書き直して挿入することもできます(最後のオプション)

4

1 に答える 1

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>
于 2012-08-21T06:13:28.373 に答える