Получить другой объект из Ninject в зависимости от ConstructorArgument - PullRequest
1 голос
/ 24 октября 2011

У меня есть следующий код:

kernel.Get<IFoo>(new ConstructorArgument("rule", myRule))

Я хочу, чтобы я получал разные объекты в зависимости от значения в myRule. Как я могу это сделать? Примерно так: psedocode

Bind<IFoo>().To<Foo1>().When(x=>x.Parameters[0].Value.Type=="type1")
Bind<IFoo>().To<Foo2>().When(x=>x.Parameters[0].Value.Type=="type2")

где Type является членом myRule

1 Ответ

1 голос
/ 26 октября 2011

Доступ к типу аргументов конструктора невозможен. Возможно, вы захотите перейти на использование именованных привязок или метаданных и ограничений.

Bind<IFoo>().To<Foo1>().WithMetadata("Type", typeof(MyRule1))
kernel.Get<IFoo>(m => m.Get<Type>("Type", null) == typeof(myRule), ConstructorArgument("rule", myRule))

Но напомните, чтобы получить доступ к ядру только из конфигурации (например, фабрики, принадлежащие конфигурации)

...