gpt4 book ai didi

c# - 如何使用 Unity 在 web api 2.0 中进行构造函数级 DI

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

我正在使用 Unity 通过创建自定义 Controller 激活器类在 ASP.Net MVC 中进行依赖注入(inject),

 public class CustomControllerActivator : IControllerActivator
{
public IController Create(RequestContext requestContext, Type controllerType)
{
var controller = default(IController);
if (controllerType != default(Type))
{
controller = ServiceLocator.Current.GetInstance(controllerType) as IController;
}
return controller;
}
}

然后是一个自定义依赖 Controller 解析器类,如下所示,

 public class CustomControllerDependencyResolver : IDependencyResolver
{
public object GetService(Type serviceType)
{
var resolvedObject = default(object);
if (serviceType == typeof(IControllerActivator))
{
resolvedObject = new CustomControllerActivator();
}

return resolvedObject;
}

public IEnumerable<object> GetServices(Type serviceType)
{
var resolvedObjects = default(IEnumerable<Object>);

resolvedObjects = ServiceLocator.Current.GetInstances(serviceType);
return resolvedObjects;
}
}

然后我将以下行添加到 global.asax.cs 文件中,

DependencyResolver.SetResolver(new CustomControllerDependencyResolver());

注册我的自定义依赖解析器。

上述方法适用于 MVC Controller ,但当我过去对 webapi Controller 执行相同操作时,它失败了,因为,尝试创建“CustomerController”类型的 Controller 时出错。确保 Controller 具有无参数公共(public)构造函数。

最佳答案

问题是 MVC 和 Webapi 由它们自己的 DI 工作,所以它从 Controller 的构造函数创建对象,它必须是 pram-less,但是当你试图制作你自己的参数构造函数时,这将取决于你的 DI ,您将需要安装学习 MVC 或 Webapi 的配置来处理您的 DI在你的情况下你使用的是 Unity 所以你必须安装 unity.webapi这是代码:

PM> Install-Package Unity.WebAPI -Version 0.10.0

关于c# - 如何使用 Unity 在 web api 2.0 中进行构造函数级 DI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091674/

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