[英]Types not resolving with Unity [MVC 5]
我正在将ASP.NET MVC 5与Unity 3和Unity Bootstrapper用于ASP.NET MVC 。
在UnityConfig.cs文件中,我在RegisterTypes方法中注册了以下类型:
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterType<IProjectRepository, ProjectRepository>();
}
在MVC控制器中,我这样解决:
UnityContainer container = new UnityContainer();
public ActionResult List()
{
var projectRepository = container.Resolve<IProjectRepository>();
return View(projectRepository.GetAll());
}
但是我收到以下异常:
System.InvalidOperationException :类型IProjectRepository没有可访问的构造函数。
当我在控制器内注册类型时,它可以正常工作,因此,以某种方式统一性忘记了UnityConfig.RegisterTypes()
定义的UnityConfig.RegisterTypes()
。
我在UnityConfig.RegisterTypes()
设置了一个断点,并正在调用该方法。
您没有获得注册的依赖关系,因为您实际上是在创建新容器,该容器在UnityConfig.RegisterTypes()中没有有关注册类型的任何信息。
您可以例如使用构造函数注入获得当前的统一容器
IUnityContainer container;
public MyController(IUnityContainer _container)
{
container = _container;
}
编辑:我也认为更好的去耦最好不要直接使用容器。 您可以使用相同的构造函数注入轻松地初始化存储库对象。
IProjectRepository projectRepository;
public MyController(IProjectRepository _projectRepository)
{
projectRepository = _projectRepository;
}
第二种方法更好,因为您没有耦合到任何特定的依赖注入器。 将来,如果您需要更改依赖项注入器,则无需更改控制器代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.