我面临的情况是我的Class构造函数需要2个参数。一个参数需要由调用对象手动传递,而另一个参数应该由Structuremap注入。我想只公开一个带有应该手动传递的参数值的构造函数。我想隐藏第二个参数,因为它应该由Structure map本身处理。任何人都可以建议如何做到这一点。
我有这样的场景
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本身,我不喜欢这个选项。还有其他优雅的解决方案吗?
答案 0 :(得分: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);
}
}