当我尝试解决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
  
  
  注意:不适用于PerResolveLifetimeManagerTransientLifetimeManager
  RegisterInstance因为它们都在每次调用时都创建一个新实例
  解决。


取自Unity 2.0上的official documentation,检查有关将Lifetime Manager与RegisterInstance方法一起使用的部分。

10-08 19:55