c# - 带有 Unity 错误的 Web API 依赖注入 - System.StackOverflowException:“引发了‘System.StackOverflowException’类型的异常。”
问题描述
我正在尝试使用统一容器在 ASP.Net Web API 中实现依赖注入,并已通过以下 2 篇文章实现了这一点:
- https://stackoverflow.com/a/38770689/3698716
- https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/dependency-injection
两者都有一些小的变化,但两者的实现是相同的。
在 UnityResolver.cs 类的 GetService 方法中实现我的代码时return _container.Resolve(serviceType);
出现 stackoverflow 异常,下面是我得到的异常:
System.StackOverflowException:“引发了‘System.StackOverflowException’类型的异常。”
有什么想法吗?
我的 UnityConfig.cs
public static class UnityConfig
{
public static UnityContainer Config()
{
UnityContainer container = new UnityContainer();
container.RegisterType<IProduct, ProductBLL>();
return container;
}
}
我的 WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var container = UnityConfig.Config();
config.DependencyResolver = new UnityResolver(container);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
还有我的 UnityResolver.cs
public class UnityResolver : IDependencyResolver
{
private readonly IUnityContainer _container;
public UnityResolver(IUnityContainer container)
{
_container = container;
}
public object GetService(Type serviceType)
{
try
{
return _container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return _container.ResolveAll(serviceType);
}
catch (ResolutionFailedException)
{
return new List<object>();
}
}
public IDependencyScope BeginScope()
{
var child = _container.CreateChildContainer();
return new UnityResolver(child);
}
public void Dispose()
{
_container.Dispose();
}
}
还有我的 PracticeController.cs
public class PracticeController : ApiController
{
private IProduct objProduct;
public PracticeController(IProduct product)
{
this.objProduct = product;
}
[HttpGet]
public string TestPractice()
{
string val = objProduct.InsertData();
Console.WriteLine(val);
Console.ReadLine();
return val;
}
}
解决方案
推荐阅读
- javascript - CSS:定时器暂停动画
- flutter - 由于新的 google play 存储权限隐私政策,如何不从 playstore 中删除
- reactjs - 删除用户帐户对话框 - 使用 React JS 的 firebase
- php - wordpress 自定义模板上的 SMTP 出现 500 内部服务器错误
- python - 具有多个测试用例的字符串的正则表达式
- business-objects - 尝试更改计算时 SAP Business Objects XI Voyager 保存的报告超时
- java - 如何从下面有节点的节点中创建回收站视图?
- node.js - 使用 aws-iot-device-sdk-js-v2 的 AWS Device Advisor MQTT 测试失败
- macos - 编译后的 Electron 应用保存第一个启动路径
- python - 拆分文本行并创建变量