【发布时间】:2018-12-05 23:31:37
【问题描述】:
我第一次尝试实现依赖注入。我基于我公司的其他工作项目和网络内容。
我遇到了解析器尝试解析控制器类型的情况。我没有注册任何控制器类型(还没有看到类似的东西),所以我很困惑。
这是我在Global.asax.cs注册的:
Container = new UnityContainer();
// repositories
foreach (var type in Assembly.GetAssembly(typeof(UserRepository))
.GetTypes()
.Where(x => x.IsClass && x.Name.EndsWith("Repository")))
{
Container.RegisterType(type);
}
// services
foreach (var type in Assembly.GetAssembly(typeof (TaskService))
.GetTypes()
.Where(x => x.IsClass && x.Name.EndsWith("Service")))
{
Container.RegisterType(type);
}
DependencyResolver.SetResolver(new UnityDependencyResolver(Container));
这里是发生异常的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
}
这是异常正文(full text here):
Microsoft.Practices.Unity.dll 中出现“Microsoft.Practices.Unity.ResolutionFailedException”类型的异常,但未在用户代码中处理
附加信息:依赖解析失败,type = "Tasks.Controllers.TasksController", name = "(none)"。
在解决时发生异常。
异常是:InvalidOperationException - 当前类型 NHibernate.ISessionFactory 是一个接口,无法构造。您是否缺少类型映射?
如您所见,当解析器获取要解析的 TasksController 类型(在 serviceType 中)并崩溃时,就会出现问题。
这是我的控制器的相关部分(这是项目中唯一的注入),如果有帮助的话:
protected TaskService TaskService { get; set; }
public TasksController(TaskService taskService)
{
this.TaskService = taskService;
}
为什么会这样?
【问题讨论】:
-
似乎错误说明了一切:您必须将 ISessionFactory 绑定到实现:例如,您可以查看blog.pastelstudios.com/2013/09/16/…
标签: c# asp.net-mvc nhibernate dependency-injection unity-container