1

我面临的情况是我的 Class 构造函数需要 2 个参数。一个参数需要由调用对象手动传递,而另一个参数应由 Structuremap 注入。我只想公开一个采用应该手动传递的参数值的构造函数。我想隐藏第二个参数,因为它应该由结构图本身处理。任何人都可以建议如何做到这一点。

我有这样的场景

public class ProcessPayments
{
    public ProcessPayments(String accountNumber, IProcessPayments paymentProcesser)
    {
        ...
    }
}

我想像这样只用第一个参数公开构造函数

var P = new ProcessPayments("123");

我希望 Structure Map 根据我的配置自动为我注入 IProcessPayments 依赖项。

我怎样才能做到这一点?

我可以在我的构造函数中做这样的事情

public ProcessPayments(String accountNumber)
{
    _AccountNumber = accountNumber;
    _ProcessPayments = ObjectFactory.GetInstance<IProcessPayments >();
}

但这意味着现在我依赖于 Structure Map 本身,我不喜欢这个选项。还有其他优雅的解决方案吗?

4

1 回答 1

1

似乎这accountNumber是一个运行时依赖项/值(它可以从调用到调用)。不要将运行时值与编译/注册时间相关性混合。accountNumber而是使用以下方法传递:

public class ProcessPayments
{
    public ProcessPayments(IProcessPayments paymentProcesser) { ... }

    public void Process(String accountNumber) { ... }
}

或者,如果这不合适,请创建一个工厂:

public class ProcessPaymentsFactory : IProcessPaymentsFactory
{
    public ProcessPaymentsFactory(IProcessPayments paymentProcesser) { ... }

    public ProcessPayments Create(String accountNumber)
    {
        return new ProcessPayments(accountNumber, this.paymentProcesser);
    }
}
于 2013-09-26T11:25:46.563 回答