【发布时间】:2020-03-13 19:25:37
【问题描述】:
研究了Autofac documentation,以及一些stackoverflow问题
Best Practices for IOC Container,
IoC Container. Inject container
我知道我需要将容器放在更高级别,然后通过所需的类。
f.ex 我有高级类控制器
public class AccountController : Controller
{
private readonly IUserManager userManager;
public AccountController(IUserManager userManager) //I configure Global.asax and there will
{ //be UserManager class. OK.
this.userManager = userManager;
}
}
在较低级别上,我有 UserManager 类和参数 IUnitOfWork。我应该把新的 UnitOfWork 实例放在那里还是用一些容器来做?
public class UserManager : IUserManager
{
readonly IUnitOfWork _unitOfWork;
public UserManager (IUnitOfWork unitOfWork)
{
this._unitOfWork = unitOfWork;
}
}
autofac 配置。
conteinerBuilder.RegisterType<UserManager>().As<IUserManager>()
.WithParameter("unitOfWork",new UnitOfWork()) //This is what bothers me
//Like I understand we wanna
//work with abstraction not with some
//implementations but there I must use
//UnitOfWork
告诉我用什么方法挖,我完全糊涂了。 如有任何帮助,我将不胜感激。 =)
【问题讨论】:
-
只需注册您的类型,默认情况下它会为您解析构造函数参数。由于您是 IoC 的新手,您可能想观看这个超级方便的视频:Deep Dive Into Dependency Injection And Writing Decoupled Quality and Testable Code
-
为什么没有两个注册?第一个
IUserManager到UserManager和第二个IUnitOfWork到UnitOfWork。我个人不使用 AutoFac,但任何容器都应该递归解析,这样当它解析 UserManager 时,它将自动使用 UnitOfWork 注册。
标签: c# asp.net dependency-injection inversion-of-control autofac