以正确的方式使用依赖注入

时间:2012-03-06 08:03:51

标签: dependency-injection inversion-of-control ioc-container autofac

我正在使用Autofac在我的解决方案中实现IoC但我怀疑我是否做得对。这是场景:
我有一些Manager类,它们都来自BaseManager类。 BaseManager有一个protected User CurrentUser字段。我正在尝试做的是使用Autofac解析CurrentUser。我编写了一个IUserProvider界面并实现了几个类(例如WebUserProviderWinformsUserProvider)。
然后我按以下方式注册了我的提供商(例如,在Global.asax)

builder.Register(c => new WebUserProvider(...)).As<IUserProvider>();  
  • 如何解决依赖关系(在我的课程中访问container)?我可以使用单例或服务定位器模式,但看起来像是anti-pattern。那我该如何解决我的依赖呢?

1 个答案:

答案 0 :(得分:5)

这对我来说听起来像是过度工程。为什么你会有一个知道用户的基础管理器类?拥有一些经理类是一个代码气味和维护危险,因为你抽象太多。你真的需要吗?

  

如何解决依赖关系(在我的类中访问容器)?

您不应该寻找访问容器的方法。 Container 必须在一个地方初始化一次。您应该通过构造函数注入所有依赖项。使用container.Resolve<T>和依赖关系图中的其他位置使用构造函数注入(或某些人使用属性注入)从依赖关系图的根传入这些依赖关系。