c# - 为什么我必须使用 IoC unity

标签 c# unit-testing design-patterns inversion-of-control unity-container

<分区>

我创建了一个适用于依赖倒置原则的类,并使用了依赖注入(inject)模式,如下:

public interface ITypeOfPrinter
{
    string Printing();
}

public class Print
{  
    private readonly ITypeOfPrinter _typeOfPrinter;

    public Print(ITypeOfPrinter typeOfPrinter)
    {
        _typeOfPrinter = typeOfPrinter;
    }

    public string print()
    {
        return _typeOfPrinter.Printing();
    }
}

public class BlackAndWhitePrinter : ITypeOfPrinter
{
    public string Printing()
    {
        NumberOfPrints++;
        return string.Format("it is Black and white printing {0}", NumberOfPrints);
    }

    public int NumberOfPrints { get; set; }

}
public class ColorfullPrinter : ITypeOfPrinter
{
    public string Printing()
    {
        NumberOfPrints++;
        return string.Format("it is colorfull printing {0}", NumberOfPrints);
    }
    public int NumberOfPrints { get; set; }
}

因此,如果我想使用 BlackAndWhitePrinter,我只需创建一个实例对象并将其提供给我的 Print 类,其构造如下:

ITypeOfPrinter typeofprinter = new BlackAndWhitePrinter();
Print hp = new Print(typeofprinter);
hp.print();

那么为什么我必须在这里使用 Unity 或其他 IoC 框架?我已经按照上面的方式做了我想做的:

var unityContainer = new UnityContainer();
unityContainer.RegisterType<ITypeOfPrinter, BlackAndWhitePrinter>();
var print = unityContainer.Resolve<Print>();
string colorfullText = print.print();

最佳答案

依赖注入(inject)作为一种模式有助于使您的应用程序代码更易于维护。 DI 框架(又名 IoC 容器)可以帮助制作 Composition Root更易于维护。

但是,如果 IoC 容器无助于使您的组合根更易于维护,请不要在那种情况下使用它!然而,这并不意味着您不应该使用依赖注入(inject)或其他有助于使您的软件更易于维护的模式和原则。你应该不惜一切代价降低 total cost of ownership您正在构建的软件。

关于c# - 为什么我必须使用 IoC unity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816507/

相关文章:

c# - 如果数组恰好是 16 个字节并且取自成功接收的 UDP 套接字,那么 new Guid(byte[]) 是否总是会生成有效的 guid?

c# - 如何将异常链接到 Azure 上的 Application Insights 中的请求?

c# - 什么是全局::?

asp.net-mvc - 使用 View.Render 方法将 MVC View 转换为字符串的单元测试方法

c# - 使用 Moq 对继承层次结构进行单元测试

c# - 关于将 List<T> 打印到屏幕的问题

node.js - 如何让断言打印成功消息?

algorithm - 将 4 步 PCAM(福斯特方法)应用于并行算法设计的示例?

design-patterns - 这种类似 monad 的函数式编程模式叫什么名字?

c++ - 组织具有部分共享接口(interface)的对象