【发布时间】:2016-11-09 17:12:52
【问题描述】:
Managing Dependency Injection in C# with Autofac用downloadable source code非常简洁地解释
手动依赖注入
var di = new EmployeeObserver(employees, new Printer(Console.Out));
di.FindExperts();
使用自动法:
ContainerBuilder autofac = new ContainerBuilder();
autofac.Register(o => new EmployeeObserver(o.Resolve<IList<Employee>>(), o.Resolve<IPrinter>()));
autofac.RegisterType<Printer>().As<IPrinter>();
autofac.RegisterInstance(employees).As<IList<Employee>>();
autofac.RegisterInstance(Console.Out).As<TextWriter>();
using (var container = autofac.Build())
{
container.Resolve<EmployeeObserver>().FindExperts();
}
在其他一些问答中,它说我们可以在编写单元测试时看到 autofac 的优势使用。
除此之外,有人可以提供更多理由或详细信息,为什么我应该使用 autofac 而不是手动依赖注入来使用更复杂的代码?
上面写着:
可能在这个特定的例子中很难理解为什么这种方法 比手动配置依赖注入要好,但是你 应该注意一件重要的事情 - 使用 Autofac,每个组件都是 独立于所有其他配置,这就是 当您的应用程序变得更复杂时会有很大的不同。
你能否举一个这个案例的复杂版本的例子,它显示了我将坚持使用的 autofac 使用与手动依赖的优势?
【问题讨论】:
-
你确定其他地方都在谈论在单元测试中使用autofac,还是在单元测试中只是依赖注入?您是专门询问单元测试部分,还是一般的 DI/autofac?这是一个相当广泛的主题,因此要在这里回答您需要非常准确地回答您的问题。
-
@JamesThorpe 尤其不是单元测试部分,而是后者
-
来自马克·西曼:When to use a DI container.
-
@MatthewWatson 看起来不错的参考,但是可以将我的问题作为示例进行投影以便于消化
标签: c# dependency-injection autofac