您是否根据请求主机值注入一些类?我通过Nuget安装了Ninject MVC3 lib。我在找这样的东西:
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();
}
}
编辑:刚刚找到这个答案。。除了工厂,还有别的办法吗?就像上面我的"伪"例子中的那个?
解决方案:
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();
}
这有帮助吗?
https://github.com/ninject/ninject/wiki/Contextual-Binding
有人提到了一个与你正在做的类似的例子,但它引用了v1而不是v2
https://github.com/ninject/ninject/wiki/Conventions-Based-Binding
试试这种方法。
Bind<IMyInterface>().To<XImplementation>().When(ctx => host.StartstWith("x.")).InRequestScope();
Bind<IMyInterface>().To<YImplementation>().When(ctx => host.StartstWith("y.")).InRequestScope();