gpt4 book ai didi

c# - 如何在 mvc 4 上通过统一在 Controller 中注入(inject)构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:34 24 4
gpt4 key购买 nike

我使用的是 unity 1.1 版本,但无法注入(inject)构造函数。我的代码如下:

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

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

注入(inject)构造函数:

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

mvc 抛出这个异常:

No parameterless constructor defined for this object.

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

如何做到这一点?

最佳答案

您需要告诉 ASP.MVC 使用您的容器来解决它们。

像这样创建一个 Controller 工厂

/// <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);
}
}

并通过 ControllerBuilder 注册它在 global.asax 中

var factory = new IocControllerFactory(_container);
ControllerBuilder.Current.SetControllerFactory(factory);

每次框架请求一个新的 Controller 时,它现在使用您的工厂,而工厂使用您的容器。

关于c# - 如何在 mvc 4 上通过统一在 Controller 中注入(inject)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com