2

IDataBusデフォルトの実装 (ファイルシステムに書き込む) を db に書き込む (AWS で実行できるようにする) ものに置き換えたいと考えています。この目的のために、私は構成拡張機能を持っています:

public static class ConfigureSqlServerDataBus
{
    public static Configure SqlServerDataBus(this Configure config)
    {
        var dataBus = new SqlServerDataBus();
        config.Configurer.RegisterSingleton<IDataBus>(dataBus);
        return config;
    }
}

バスを構成できるようにします。しかし、明らかに myは、どこに書き込むかを指示するもの (この場合は実装) にSqlServerDataBus依存しています。IRepository

通常、コンストラクターを介して依存関係を要求しますが、サービス バスの構成は、インスタンスの作成にIWantCustomInitialization使用する を介して行われるため、できません。Activator私の理解では、NServiceBus は依存関係を満たすためにプロパティ インジェクションを使用しますが、これは行わないようです。構成が完了した後、次のような呼び出しがいくつかあります。

Configure
.With()
.DefineEndpointName("SomeName")
.DefaultBuilder()
.DBSubcriptionStorage()
.XmlSerializer()
.SqlServerDataBus()
.MsmqTransport()
    .IsTransactional(true)
.UnicastBus()
.LoadMessageHandlers()
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());


Configure.Instance.Configurer.ConfigureComponent<RepositoryImplementation>(ComponentCallModelEnum.None);
Configure.Instance.Configurer.ConfigureComponent<SqlServerDataBus>(ComponentCallModelEnum.None);

Put メソッドは呼び出されますが、私のセッターSqlServerDataBusは呼び出されません。

誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

4

バスがすでに開始された後に構成を変更することはできません。構成呼び出しを流暢な初期化コードに移動するには、RunCustomAction メソッドを使用します。

または、INeedInitialization を実装する新しいクラスを作成し、そこで構成呼び出しを行うこともできます。このクラスは適切なタイミングで呼び出されます。

于 2012-07-13T19:32:38.540 に答える