【发布时间】:2017-07-18 13:34:09
【问题描述】:
我将 Ninject 与以下软件包一起使用:
- 忍者
- Ninject.MVC5
- Ninject.Web.Common(和 Common.WebHost)
- Ninject.Web.WebApi(和 WebApi.WebHost)
我有一个如下所示的 WebApi2 控制器。我的Get() 方法必须是高性能的,并且它不依赖于IMyFooService 的值,因此我不在乎它是否在请求Get() 时被注入。
问题:
只有当某些 api 方法被调用时,我有没有办法选择性地绑定接口?是通过使用属性还是...?
public class FooController : ApiController {
public IMyFooService fooService;
public FooController(IMyFooService fooService) {
this.fooService = fooService;
}
[NonDependent] // Don't really care about the value of fooService
public JsonResult Get() {}
[Dependent] // Must have valid dependency injection
public async Task<JsonResult> Post([FromBody] IList foos) {
var didMyFoo = this.fooService.DoTheFoo();
}
}
这是我的NinjectWebCommon.cs:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IMyFooService>().To<MyConcreteService>().InRequestScope();
}
我注意到To<T>() 有很多.When() 选项。或许我可以借此说.When(/* Controller = Foo, Action = Post */)。
【问题讨论】:
-
看看这篇文章。 rehansaeed.com/asp-net-core-lazy-command-pattern 有人已经提出了类似的建议,但我相信这就是您正在寻找的设计。
标签: c# asp.net-web-api dependency-injection ninject