Как обеспечить инъекцию для метода, который вызывается в NinjectModule - PullRequest
0 голосов
/ 31 марта 2011

У меня есть следующий NinjectModule производный класс:

class MainModule : NinjectModule 
{
    public override void Load()
    {
        Bind<IMyClass>().To<MyClass>();

        Bind<IMainClass>().To<MainClass>().OnActivation((context,myClass) => 
        { myClass.Add("Something", context.Kernel.Get<IMyClass>());  });
    }
}

Моя проблема в том, что IKernel не предоставляет метод расширения .Get<T>.

Есть ли шаблон дляделать это?

Предостережения: я не хочу, чтобы мои классы украшались атрибутами Ninject, поскольку Add зависит от того, как работает MainClass Я хотел, чтобы весь код был связан с его созданиемудерживаться в этом модуле.

TIA

1 Ответ

0 голосов
/ 01 апреля 2011

Хммм, глупый недосмотр в конце кажется.Методы расширения находятся в пространстве имен Ninject, для использования модуля требуется, чтобы вы using Ninject.Modules;

Добавление using Ninject; означало, что возможно следующее:

Bind<IMainClass>().To<MainClass>()
.OnActivation((context,myClass) => 
{ 
    foreach(var n in context.Kernel.GetAll<IMyClass>())
    {
        myClass.Add("Something", n);  
    }
});

I 'оставлю это открытым на некоторое время, чтобы узнать, есть ли у кого-нибудь лучший способ сделать это.

...