ASP.NET MVC3 условная инъекция - PullRequest
0 голосов
/ 13 января 2012

Как вы вводите какой-то класс, основанный на значении запроса?Я установил Ninject MVC3 lib через Nuget.Я ищу что-то вроде этого:

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();
}   

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Помогает ли это?

https://github.com/ninject/ninject/wiki/Contextual-Binding

Есть упоминание о подобном примере с тем, что вы делаете, но он ссылается на v1, а не на v2

https://github.com/ninject/ninject/wiki/Conventions-Based-Binding

1 голос
/ 13 января 2012

Попробуйте так.

Bind<IMyInterface>().To<XImplementation>().When(ctx => host.StartstWith("x.")).InRequestScope();
Bind<IMyInterface>().To<YImplementation>().When(ctx => host.StartstWith("y.")).InRequestScope();
...