当我尝试解决unitOfWork时,出现此错误:
“类型IUnitOfWork没有可访问的构造函数。”
但是,仅当我将unitOfWork的LifetimeManager设置为PerResolveLifetimeManager时,才会发生这种情况。如果我只使用默认值,那么一切正常。
我的unitOfWork,确实有一个公共的无参数构造函数。
这是我的代码:
//Global asax
IUnityContainer unity = new UnityContainer();
unity.RegisterType<HomeController>();
unity.RegisterInstance<IUnitOfWork>(new UnitOfWork(), new PerResolveLifetimeManager());
ControllerBuilder.Current.SetControllerFactory(new IocControllerFactory(unity));
//IocControllerFactory
public class IocControllerFactory : DefaultControllerFactory
{
private readonly IUnityContainer _container;
public IocControllerFactory(IUnityContainer container)
{
_container = container;
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType != null)
return _container.Resolve(controllerType) as IController;
else
return base.GetControllerInstance(requestContext, controllerType);
}
}
//Home controller constructor
public HomeController(IUnitOfWork unitOfWork)
{
}
最佳答案
您可以指定以下Unity内置生命周期管理器之一
类型或您调用RegisterInstance
方法时的自定义类型:
ContainerControlledLifetimeManager
外部控制的LifetimeManager
HierarchicalLifetimeManager
注意:不适用于PerResolveLifetimeManager
或TransientLifetimeManager
RegisterInstance
因为它们都在每次调用时都创建一个新实例
解决。
取自Unity 2.0上的official documentation,检查有关将Lifetime Manager与RegisterInstance方法一起使用的部分。