gpt4 book ai didi

c# - 在简单注入(inject)器中手动注册 web api Controller

转载 作者:行者123 更新时间:2023-11-30 21:40:50 29 4
gpt4 key购买 nike

我使用的是 Umbraco,它的底层有很多自定义 Web API Controller 。我想在简单的注入(inject)器中忽略它们,而只是手动注册我自己的 web api Controller 。

  1. 我应该将 Controller 的生活方式注册为 transient 还是范围? Web api Controller 实现 IDisposable , 但如果我理解正确的话,简单的注入(inject)器在使用 container.RegisterMvcControllers() 时将它们注册为 transient .如果它们在使用 web api 时也应该是 transient 的?如果是这样,我想我必须取消一次性警告?

  2. 注册会是什么样子?如果我只是做一个container.Register<MyController>(Lifestyle.Transient)我的 Controller 注入(inject)了另一个注册接口(interface),即 public MyController(IMyRegisteredInterface foo) ,它会抛出异常 Make sure that the controller has a parameterless public constructor .

最佳答案

I would like to ignore them in simple injector and just manually register my own web api controllers

您可以轻松地忽略它们,同时通过仅向 RegisterWebApiControllers 方法提供您希望扫描的程序集来享受批量注册的乐趣,如下所示:

container.RegisterWebApiControllers(httpConfiguration,
typeof(MyApiController).Assembly);

Should I register the controller's lifestyle as transient or scoped?

你可以两者都做,但是将它们注册为 transient 通常是最简单的,因为这可以防止它的所有依赖项也应该是 Scoped 的。这样做的缺点是,由于 ApiController 实现了 IDisposable,这意味着您将不得不抑制 DisposableTransientComponent 诊断警告。这实际上是 Web API 中的一个设计缺陷,因为基类和接口(interface)通常应该实现IDisposable。这个警告可以被抑制,因为 Web API 将确保处理。

最简单的做法是使用 RegisterWebApiControllers 方法提供的批注册工具,因为它会自动为您抑制此警告。

Make sure that the controller has a parameterless public constructor.

确保您遵循 Web API Integration Guide ,尤其是使用 SimpleInjectorWebApiDependencyResolver;它将确保 Controller 由简单注入(inject)器解析。

关于c# - 在简单注入(inject)器中手动注册 web api Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44140559/

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