以下是我的IOperation界面,它有两个签名:
public interface IOperations
{
int Mul(int a, int b);
int Sum(int a, int b);
}
在Operation类中,我实现了上述方法:
public class Operations:IOperations
{
public int Mul(int a,int b)
{
return a * b;
}
public int Sum(int a,int b)
{
return a + b;
}
}
现在在主程序中我应该如何满足DI?像这样?
static void Main(string[] args)
{
IOperations myOperations = new Operations();
myOperations.Mul(3, 2);
}
答案 0 :(得分:1)
这是定义构造函数注入,这是最常见的DI模式。您基本上是说您的TestController需要一个实现IUnitOfWork的类才能运行。但是,不是硬编码依赖项,而是指定TestController在创建时将传递IUnitOfWork的实现。在您的依赖注入框架的配置中,您将拥有类似的内容:
Bind<IUnitOfWork >().To<UnitOfWorkImpl>();
指定将实例化的实际类。
答案 1 :(得分:1)
这与依赖注入无关;
的构造函数是什么public class TestController
{
private IUnitOfWork unitOfWork;
public TestController(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
}
它只是简单地获取IUnitOfWork
对象的实例并将其存储在其unitOfWork
字段中。
所以,你可能(但不应该)这样称呼它:
// Returns an instance of IUnitOfWork.
IUnitOfWork mySpecificUnitOfWorkInstance = this.GetUnitOfWork();
// Now you pass that exact instance to the TestController so that it can do stuff with it.
TestController testController = new TestController(mySpecificUnitOfWorkInstance);
更简单的例子可能(没有可能令人困惑的依赖注入,存储库模式等概念):
public class NumberHolder
{
private int number = 0;
public NumberHolder(int number)
{
this.number = number;
}
}
如果你这样称呼它
NumberHolder foo = new NumberHolder(42);
您实际上已将42
传递给NumberHolder
的新实例。
进一步阅读:docs.microsoft.com上的Using Constructors。