C# 在simple injector中手动注册web api控制器

C# 在simple injector中手动注册web api控制器,c#,simple-injector,C#,Simple Injector,我使用的是Umbraco,它有很多自定义的webapi控制器。我想在SimpleInjector中忽略它们,只是手动注册我自己的WebAPI控制器 我应该将控制器的生活方式注册为瞬态还是范围?Web api控制器实现了IDisposable,但如果我理解正确,简单注入器在使用container.RegisterMvcControllers()时会将它们注册为瞬态。当使用web api时,它们是否也应该是暂时的?如果是这样的话,我想我必须抑制一次性警告 注册情况如何?如果我简单地执行一个容器.Re

我使用的是Umbraco,它有很多自定义的webapi控制器。我想在SimpleInjector中忽略它们,只是手动注册我自己的WebAPI控制器

  • 我应该将控制器的生活方式注册为瞬态还是范围?Web api控制器实现了
    IDisposable
    ,但如果我理解正确,简单注入器在使用
    container.RegisterMvcControllers()
    时会将它们注册为瞬态。当使用web api时,它们是否也应该是暂时的?如果是这样的话,我想我必须抑制一次性警告

  • 注册情况如何?如果我简单地执行一个
    容器.Register(livelity.Transient)
    并且我的控制器注入另一个注册接口,即
    公共MyController(IMyRegisteredInterface foo)
    ,它将抛出异常
    确保控制器具有无参数公共构造函数

  • 我想在SimpleInjector中忽略它们,而只是手动注册我自己的WebAPI控制器

    您可以很容易地忽略它们,同时仍然享受批注册,方法是只将希望扫描的程序集提供给
    RegisterWebApp控制器
    方法,如下所示:

    container.RegisterWebApiControllers(httpConfiguration,
        typeof(MyApiController).Assembly);
    
    我应该将控制器的生活方式注册为瞬态还是范围

    您可以同时执行这两项操作,但将它们注册为瞬态通常是最简单的,因为这样可以防止其所有依赖项也被限定范围。这样做的缺点是,由于
    ApiController
    实现了
    IDisposable
    ,这意味着您必须抑制
    可处置瞬态组件
    诊断警告。这实际上是Web API中的一个设计缺陷,因为基类和接口通常不应实现
    IDisposable
    。此警告可以被抑制,因为Web API将确保处理

    最简单的方法是使用
    registerWebapicController
    方法提供的批注册功能,因为它会自动为您抑制此警告

    确保控制器具有无参数公共构造函数


    确保遵循,尤其是使用
    SimpleInjectorWebApidencyResolver
    ;这将确保通过简单的喷油器解决控制器问题。

    aah,谢谢!我缺少
    SimpleInjectorWebApidencyResolver
    :)。我想对MVC使用
    SimpleInjectorDependencyResolver
    是有效的,对web api并行使用
    SimpleInjectorWebApidencyResolver
    也是有效的?@filur:你真的没有选择。两个框架都需要自己的钩子来解析自己的控制器实例集。