如何配置一个新的IDataBus实现,该实现具有需要在NServiceBus中注入的依赖项?

时间:2012-07-13 16:56:44

标签: dependency-injection nservicebus

我想用一个写入db的默认IDataBus实现(写入文件系统)替换它(因此它可以在AWS上运行)。为此,我有一个配置扩展名:

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

允许我配置总线。但显然我的SqlServerDataBus依赖于某些东西来告诉它在哪里写(在这种情况下是IRepository实现)。

通常我会通过构造函数请求依赖,但是因为服务总线的配置是通过IWantCustomInitialization完成的,Activator将使用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); 来创建实例,我不能。我的理解是NServiceBus将使用属性注入来满足依赖性,但它似乎没有这样做。配置完成后,我有几个这样的调用:

SqlServerDataBus

但我永远不会调用{{1}}的setter,尽管Put方法是。

有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:4)

在总线启动后,您无法更改配置。要将配置调用移动到流畅的初始化代码,请使用RunCustomAction方法。

或者,您可以编写一个实现INeedInitialization的新类,并在那里进行配置调用。该课程将在合适的时间调用。