我在控制器构造函数中使用unity时遇到了问题。以下是详细信息 -
在单位配置(unity.config)中 - 这就是我正在做的事情 -
container.RegisterType<ISessionWrapper, SessionWrapper>()
在Controller构造函数
中 public OnboardingController( ISessionWrapper sessionwrapper )
{
SessionWrapper = sessionwrapper;
}
SessionWrapper
公共接口ISessionWrapper { string Brand {get;组; } // string CurrenSessionCulture {get;组; } }
public class SessionWrapper : ISessionWrapper
{
public string Brand
{
get;
set;
}
}
执行此操作时出错
没有为此对象定义无参数构造函数。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。
来源错误: 在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。****
当我像这样更改Controller Constructor定义时,它一切正常。
public OnboardingController()
: this(new SessionWrapper())
{
//
}
答案 0 :(得分:0)
您需要使用Unity自定义ControllerFactory来解析控制器类的实例。 MVC使用的默认ControllerFactory要求控制器类具有无参数构造函数。
使用Unity的自定义ControllerFactory看起来像
public class UnityControllerFactory : DefaultControllerFactory {
private readonly IUnityContainer _container;
public UnityControllerFactory (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);
}
}
}
在应用程序启动时(通常在global.asax中),您可以使用以下代码在MVC运行时中注册ControllerFactory
var container = // initialize your unity container
var factory = new UnityControllerFactory(container);
ControllerBuilder.Current.SetControllerFactory(factory);