我过去使用过很多不同的DI容器,但从未使用过 Unity(特别是Unity 4.0.1)。我正在使用一个.NET MVC具有典型三层架构的普通旧应用程序。Repository -> Domain -> WebUI。我需要知道我做错了什么,以便我可以让我注册的依赖项在域层上工作。这是我的global.asax.protected void Application_Start(){ // ... IUnityContainer container = new UnityContainer(); RegisterDependencies(container); DependencyResolver.SetResolver(new WebApplicationDependencyResolver(container));}protected void RegisterDependencies(IUnityContainer container){ container.RegisterType<IUnitOfWork, UnitOfWork>();}这是WebApplicationDependencyResolver上面使用的:namespace WebApplication1.Infrastructure{ public class WebApplicationDependencyResolver : IDependencyResolver { private IUnityContainer _container; public WebApplicationDependencyResolver(IUnityContainer container) { _container = container; } public object GetService(Type serviceType) { try { return _container.Resolve(serviceType); } catch (Exception) { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { return _container.ResolveAll(serviceType); } catch (Exception) { return null; } } }}我的Domain Layer类CustomerService.cs(我在它自己的项目和主项目的文件夹中使用):namespace WebApplication1.Services{ public class CustomerService { private readonly IUnitOfWork _uow; public CustomerService(IUnitOfWork uow) { _uow = uow; } }}现在,当我尝试CustomerService像这样调用控制器中的类时,它不起作用:public ActionResult Index(){ var service = new CustomerService(); return View();}谁能指导我正确的方向,开始DI在域层上工作?
1 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
尝试在控制器中注入服务而不是注入IUnitOfWork. 然后在控制器方法中使用服务实例:
public HomeController(CustomerService service)
{
_service = service
}
public ActionResult Index()
{
var model = _service.GetAllCustomers();
return View(model);
}
这应该可行,但让你的类依赖于另一个类并不是一个好主意。依赖关系应该是一个契约(接口)。您应该重构CustomerService以提取接口ICustomerService并将其注入控制器中。然后你需要在方法中将其注册到容器中RegisterDependencies:
container.RegisterType<ICustomerService, CustomerService>();
- 1 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消