C# Asp.Net MVC Unity dependency injection在尝试解析控制器时出现异常

C# Asp.Net MVC Unity dependency injection在尝试解析控制器时出现异常,c#,asp.net-mvc,nhibernate,dependency-injection,unity-container,C#,Asp.net Mvc,Nhibernate,Dependency Injection,Unity Container,我第一次尝试实施依赖性注射。我在公司的其他工作项目和网络内容中工作 我遇到了这样一种情况:解析器试图解析控制器类型。我没有注册任何控制器类型,也没有看到任何类似的东西,所以我很困惑 以下是我在Global.asax.cs的注册信息: 以下是发生异常的UnityDependencyResolver方法: private readonly IUnityContainer _container; public UnityDependencyResolver(IUnityContainer conta

我第一次尝试实施依赖性注射。我在公司的其他工作项目和网络内容中工作

我遇到了这样一种情况:解析器试图解析控制器类型。我没有注册任何控制器类型,也没有看到任何类似的东西,所以我很困惑

以下是我在Global.asax.cs的注册信息:

以下是发生异常的UnityDependencyResolver方法:

private readonly IUnityContainer _container;

public UnityDependencyResolver(IUnityContainer container)
{
    this._container = container;
}

public object GetService(Type serviceType)
{
    if (!_container.IsRegistered(serviceType))
    {
        if (serviceType.IsAbstract || serviceType.IsInterface)
        {
            return null;
        }
    }
    return _container.Resolve(serviceType); // Right on this line the exception occurs
}
这是例外主体:

Microsoft.Practices.Unity.ResolutionFailedException类型的异常发生在Microsoft.Practices.Unity.dll中,但未在用户代码中处理

其他信息:依赖项解析失败,类型=Tasks.Controllers.TasksController,名称=无

解析时发生异常

异常为:InvalidOperationException-当前类型NHibernate.ISessionFactory是一个接口,无法构造。是否缺少类型映射

如您所见,当解析程序在serviceType中获取要解析的TasksController类型并崩溃时,就会出现问题

这是我的controllerIt的相关部分它是项目中唯一的注入,如果它有帮助的话:

protected TaskService TaskService { get; set; }

public TasksController(TaskService taskService)
{
    this.TaskService = taskService;
}

为什么会发生这种情况?

有一个名为Unity bootstraper for ASP.NET MVC的NuGet软件包,专门针对ASP.NET MVC web应用程序,您尝试过吗?基本上,在安装之后,只需在App_Start文件夹下注册您想要注入到UnityConfig.cs中的内容,就可以了

例如:

public static void RegisterTypes(IUnityContainer container)
{
    // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
    // container.LoadConfiguration();

    // TODO: Register your types here
    container.RegisterType<IAuthProvider, FormsAuthProvider>();
}

其中IAuthProvider是接口,FormsAuthProvider是实际实现

似乎错误说明了一切:您必须将ISessionFactory绑定到一个实现:例如,您可以看看Thank You dude,我会检查它。
public static void RegisterTypes(IUnityContainer container)
{
    // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
    // container.LoadConfiguration();

    // TODO: Register your types here
    container.RegisterType<IAuthProvider, FormsAuthProvider>();
}