您需要告诉 ASP.MVC 使用您的容器来解决它们。
创建一个控制器工厂,如
/// <summary>
/// Controller factory which uses an <see cref="IUnityContainer"/>.
/// </summary>
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);
}
}
并通过global.asax 中的ControllerBuilder注册它
var factory = new IocControllerFactory(_container);
ControllerBuilder.Current.SetControllerFactory(factory);
每次框架要求一个新的控制器时,它现在都会使用您的工厂,该工厂使用您的容器。