ASP.NET MVC3 Ninject条件注入



您是否根据请求主机值注入一些类?我通过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();

最新更新