如果需要手动传递某些构造函数参数,如何使用 DI 的结构映射
本文关键字:参数 何使用 DI 映射 结构 构造函数 如果 | 更新日期: 2023-09-27 18:32:49
>我面临着我的类构造函数采用 2 个参数的情况。一个参数需要由调用对象手动传递,而另一个参数应由结构图注入。我只想公开一个接受应手动传递的参数值的构造函数。我想隐藏第二个参数,因为它应该由结构图本身处理。谁能建议如何做到这一点。
我有这样的场景
public class ProcessPayments
{
public ProcessPayments(String accountNumber, IProcessPayments paymentProcesser)
{
...
}
}
我想像这样只用第一个参数公开构造函数
var P = new ProcessPayments("123");
我希望结构图根据我的配置自动为我注入 IProcessPayments 依赖项。
我怎样才能做到这一点?
我可以在我的构造函数中做这样的事情
public ProcessPayments(String accountNumber)
{
_AccountNumber = accountNumber;
_ProcessPayments = ObjectFactory.GetInstance<IProcessPayments >();
}
但这意味着现在我依赖于结构图本身,我不喜欢这个选项。还有其他优雅的解决方案吗?
似乎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);
}
}