工作单元和存储库模式依赖注入

时间:2018-06-01 14:30:48

标签: c# dependency-injection

以下是我的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);


    }

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