一旦我试图解决我的unitOfWork,我就会得到以下错误:
“类型IUnitOfWork没有可访问的构造函数。”
但是,只有当我将unitOfWork的unitOfWork设置为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)
{
}
发布于 2013-07-27 14:01:26
在调用
RegisterInstance
方法时,您可以指定下列在生命周期管理器中内置的类型之一或自定义类型:
注意:不适合在RegisterInstance
中使用PerResolveLifetimeManager
或TransientLifetimeManager
,因为它们都在每个要解决的调用上创建一个新实例。
取自Unity2.0上的正式文件,请查看关于使用RegisterInstance方法的生命时间管理器的部分。
发布于 2014-09-10 11:12:57
当您想要注册一个具有统一对象的现有对象时,使用RegisterInstance --当对此类型有请求时,返回相同对象的实例(而不是新的对象)。默认情况下,RegisterInstance方法具有ContainerControlledLifetimeManager,它通过容器的生存期来管理一个实例。
在PerResolveLifetimeManager的情况下,每次请求解析时,都会创建一个新的对象实例。
因此,当您尝试使用PerResolveLifetimeManager和RegisterInstance时,会向您抛出Method.The错误。
https://stackoverflow.com/questions/17898433
复制相似问题