C# 工作单元和存储库模式依赖项注入
以下是我的IOOperation接口,它有两个签名:C# 工作单元和存储库模式依赖项注入,c#,dependency-injection,C#,Dependency Injection,以下是我的IOOperation接口,它有两个签名: public interface IOperations { int Mul(int a, int b); int Sum(int a, int b); } 在操作类中,我实现了上述方法: public class Operations:IOperations { public int Mul(int a,int b) { return a * b; } public in
public interface IOperations
{
int Mul(int a, int b);
int Sum(int a, int b);
}
在操作类中,我实现了上述方法:
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);
}
这是定义构造函数注入,这是最常见的DI模式。您基本上是说您的TestController需要一个实现IUnitOfWork的类才能正常工作。但是,您没有硬编码依赖项,而是指定TestController在创建时将通过一个IUnitOfWork实现。在依赖项注入框架的配置中,您将有如下内容:
Bind<IUnitOfWork >().To<UnitOfWorkImpl>();
Bind().To();
它指定了将被实例化的实际类。与依赖项注入无关;什么是构造师
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);
更简单的例子可能是(没有可能混淆的依赖注入、存储库模式等概念): 如果你这样称呼它
NumberHolder foo = new NumberHolder(42);
实际上,您将42
传递给NumberHolder
的新实例
进一步阅读:在docs.microsoft.com上。我可以在这里再问一个关于DI的问题吗?@mrslt当然,走吧,我正在努力理解DI,我创建了一个小控制台项目,创建了一个接口IOperations,它有两个含义:int mul(int a,int b);整数和(整数a,整数b);我在Operations类中实现了这些方法,但是根据DI,我应该如何在主程序中使用它们来满足DIThere的要求,这里没有关于依赖项注入的任何需要记住的内容,因为这里没有依赖项。如果您要创建一个需要处理数学运算的
计算器
类,那么计算器应该只“知道”IOperations
,而不是operations
。这意味着构造函数的签名应该是这样的公共计算器(IOperations operations)
,而不是公共计算器(operations)
。
NumberHolder foo = new NumberHolder(42);