dependency-injection - 如何配置一个新的 IDataBus 实现,该实现具有需要注入(inject)到 NServiceBus 中的依赖项?

标签 dependency-injection nservicebus

我想将默认的 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 创建实例不能。我的理解是 NServiceBus 将使用属性注入(inject)来满足依赖关系,但它似乎没有这样做。配置完成后,我有几次这样的调用:

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

但是我的 SqlServerDataBus setter 从未被调用,尽管 Put 方法被调用了。

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

最佳答案

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

或者,您可以编写一个实现 INeedInitialization 的新类,并在其中进行配置调用。该类将在正确的时间被调用。

关于dependency-injection - 如何配置一个新的 IDataBus 实现,该实现具有需要注入(inject)到 NServiceBus 中的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474939/

相关文章:

c# - NServiceBus 自定义消息处理程序类型

javascript - 如何在 Angular2 >= 2.0.0-rc6 中将一个服务注入(inject)另一个服务?

UrlMatcher 中的 Angular 6+ 依赖注入(inject)和异步

c# - log4net - 为跟踪目的创建许多记录器是一个好习惯吗?

c# - NServiceBus 中的 SendOnly

asp.net-mvc - 当我传递某些类型进行扫描时,MVC 中的 NServiceBus 初始化失败

events - 用于 CQRS 事件发布设置的 NServiceBus

c# - 使用简单注入(inject)器注册开放通用单例

android - 任务 ':app:kaptDebugKotlin' 执行失败 - 使用 Hilt 时发生错误

java - Dagger 组件有冲突的作用域