Hod根据请求主机值注入一些类吗?我通过Nuget安装了Ninject MVC3库。我在寻找这样的事情:ASP.NET MVC3 Ninject有条件注入
private static void RegisterServices(IKernel kernel)
{
var host = get host from request;
if (host.StartstWith("x."))
{
kernel.Bind<IMyInterface>().To<XImplementation>().InRequestScope();
}
else if (host.StartstWith("y."))
{
kernel.Bind<IMyInterface>().To<YImplementation>().InRequestScope();
}
}
编辑:刚发现this answer ..有任何其他方式比工厂?就像我上面的“伪”例子中的那个一样?
解决方案:
private static void RegisterServices(IKernel kernel)
{
var host = HttpContext.Current.Request.Headers["host"].ToLower();
kernel.Bind<IMyInterface>().To<XImplementation>().When(ctx => host.StartsWith("x.")).InRequestScope();
kernel.Bind<IMyInterface>().To<YImplementation>().When(ctx => host.StartsWith("y.")).InRequestScope();
}
没办法,你应该每个请求进行登记。搜索Mark Seemann RRR模式 – 2012-01-15 00:32:03
如果条件结构不足,可以使用ToMethod,ToProvider或构建您自己的工厂。一般来说,有条件的方法应该是你的第一停靠点 - 请参阅@Simon Halsey的回答 – 2012-01-15 00:33:58
@RubenBartelink如果我删除.InRequestScope(),在使用To时还有什么问题?是使用工厂更好的乳清?如果这是为什么如此? – redman 2012-01-15 11:17:10