我正在使用Autofac在我的解决方案中实现IoC但我怀疑我是否做得对。这是场景:
我有一些Manager
类,它们都来自BaseManager
类。 BaseManager
有一个protected User CurrentUser
字段。我正在尝试做的是使用Autofac解析CurrentUser
。我编写了一个IUserProvider
界面并实现了几个类(例如WebUserProvider
和WinformsUserProvider
)。
然后我按以下方式注册了我的提供商(例如,在Global.asax)
:
builder.Register(c => new WebUserProvider(...)).As<IUserProvider>();
container
)?我可以使用单例或服务定位器模式,但看起来像是anti-pattern。那我该如何解决我的依赖呢?答案 0 :(得分:5)
这对我来说听起来像是过度工程。为什么你会有一个知道用户的基础管理器类?拥有一些经理类是一个代码气味和维护危险,因为你抽象太多。你真的需要吗?
如何解决依赖关系(在我的类中访问容器)?
您不应该寻找访问容器的方法。 Container 必须在一个地方初始化一次。您应该通过构造函数注入所有依赖项。使用container.Resolve<T>
和依赖关系图中的其他位置使用构造函数注入(或某些人使用属性注入)从依赖关系图的根传入这些依赖关系。