2

我正在使用统一 1.1 版本,我无法注入构造函数。我的代码如下:

在 global.asax Application_Startup 方法中注册依赖项:

Core.Instance.Container.RegisterType<ICartBusiness, CartBusiness>();

注入构造函数:

private ICartBusiness _business;
        public FooController(ICartBusiness business)
        { _business = business; }

mvc 抛出此异常:

没有为此对象定义无参数构造函数。

PS:我不能使用任何新版本的统一,因为我使用了太多引用的旧 dll,所以我不能使用 unity.WebApi 或 unity.Mvc3 dll。

这个怎么做?

4

1 回答 1

12

您需要告诉 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);

每次框架要求一个新的控制器时,它现在都会使用您的工厂,该工厂使用您的容器。

于 2013-02-01T16:04:32.180 回答