Ninject: абстрактный класс - PullRequest
1 голос
/ 14 мая 2010

Нужно ли делать что-то другое в абстрактном классе, чтобы заставить внедрение зависимостей работать с Ninject?

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

public abstract class BaseController : Controller
{
    public IAccountRepository AccountRepository
    {
        get;
        set;
    }
}

Мой модуль выглядит так:

public class WebDependencyModule : NinjectModule
{
    public override void Load()
    {
        Bind<IAccountRepository>().To<AccountRepository>();
    }
}

А это мой Global.asax:

protected override void OnApplicationStarted()
{
    Kernel.Load(new WebDependencyModule());
}

protected override IKernel CreateKernel()
{
    return new StandardKernel();
}

Работает, когда я украшаю свойство IAccountRepository атрибутом [Inject].

1 Ответ

2 голосов
/ 14 мая 2010

Не уверен, что вы пытаетесь сделать.

Похоже, вы хотите сделать инъекцию свойства. Если это так, вы должны придерживаться атрибута.

Ninject случайно не вставляет вещи в свойствах.

Даже если бы это было возможно, вы не захотите этого с точки зрения попытки понять, что зависит от чего (я полностью отучился от ПИ).

Если вы хотите выполнить инжекцию в конструктор, конкретному контроллеру потребуется запросить его и передать его в BaseController.

Ninject перейдет к Object и введет свойства Attributed, но не обрабатывает abstract классы каким-либо особым образом.

Либо это, либо я что-то упустил.

...