我使用Ninject
使用构造函数注入绑定服务类。
我的问题是:
我有一个类(控制器)User
,它在构造函数中使用接口IService
。
IService
由UowService
和ReadonlyService
实施。
现在,如果网络请求是ReadonlyService
,我想要注入GET
。但UowService
为POST
。此外,它只应配置类User
,这意味着此绑定不应影响任何其他类。
我知道我可以像这样绑定User
:
kernel.Bind<IService>().To<ReadonlyService>().WhenInjectedInto<User>()
并且,以下可以用于根据http方法绑定
kernel.Bind<IService>().ToMethod(ctx =>
{
var verb = HttpContext.Current..HttpMethod;
if (verb == "GET")
{
return kernel.Get<ReadonlyService>();
}
return kernel.Get<IService>();
});
但如何结合这两个条件?另外,有没有更好,更直接的方法呢?
答案 0 :(得分:1)
您可以将自定义条件基于.When(ctx => ...
方法。以下绑定仅适用于:
User
HttpContext.Current.Request.HttpMethod == "GET"
kernel.Bind<IService>().To<ReadonlyService>()
.When(r =>
{
// return false if not injected into User
if (r.Target == null)
{
return false;
}
if(!typeof(User)
.IsAssignableFrom(r.Target.Member.ReflectedType))
{
return false;
}
return HttpContext.Current.Request.HttpMethod == "GET";
});