【问题标题】:Injecting a factory with multiple constructor parameters注入具有多个构造函数参数的工厂
【发布时间】:2016-06-07 14:38:25
【问题描述】:

最初我只需要MessageQueueFactory创建一个队列:

container.RegisterSingleton<IMessageQueueFactory>(() => {
    var uploadedWaybillsQueuePath = ConfigurationManager
        .AppSettings["msmq:UploadedDocumentsQueuePath"];
    return new MessageQueueFactory(uploadedWaybillsQueuePath);
});

现在需求发生了变化,因此需要支持多个队列。

我在这里能做的最简单的事情就是将其他路径(存储在app.config中)添加到工厂的构造函数中,并为每个队列提供方法:

container.RegisterSingleton<IMessageQueueFactory>(() => {
    var uploadedDocsQueuePath = ConfigurationManager
        .AppSettings["msmq:UploadedDocumentsQueuePath"];
    var requestedDocsQueuePath = ConfigurationManager
        .AppSettings["msmq:RequestedDocumentsQueuePath"];

    return new MessageQueueFactory(
        uploadedWaybillsQueuePath,
        requestedDocsQueuePath
    );
});

interface IMessageQueueFactory {
    MessageQueue CreateUploadedDocsQueue();
    MessageQueue CreateRequestedDocsQueue();
}

这是一个糟糕的设计吗?如何重构?

【问题讨论】:

标签: c# .net design-patterns dependency-injection simple-injector


【解决方案1】:

我不会考虑这种糟糕的设计。您需要提供队列名称并将其作为 appSetting 以便在需要时更轻松地更新它们。

它也感觉像较少摩擦的路径,这总是好的,但我不太喜欢它,因为每次添加新名称时都必须更改界面,这不是很好。

我发现这篇文章有一些你可能感兴趣的答案:

IoC - Multiple implementations support for a single interface

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多