只要我試圖解決我的UnitOfWork我得到這個錯誤:「該型IUnitOfWork不具有可訪問的構造函數」問題解決依賴使用Unity
但是,只有當我將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 v3.5中自動註冊的完整示例,請參閱http://stackoverflow.com/questions/17168458/unity-autoregistration-convention-based-registration-unity/25654904#25654904。 – Contango