繁体   English   中英

Unity无法解析的类型[MVC 5]

[英]Types not resolving with Unity [MVC 5]

我正在将ASP.NET MVC 5与Unity 3Unity 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM