.Net MVC 3 с Ninject и конфигурацией атрибута [Inject] - PullRequest
1 голос
/ 03 августа 2011

Я заменил наследование HttpAplication в моем Global.asax на NinjectHttpApplication :

public class Global : NinjectHttpApplication
{
    protected override IKernel CreateKernel()
    {
        return Bootstrapper.CreateKernel();
    }

    protected override void OnApplicationStarted()
    {
        base.OnApplicationStarted();
        DependencyResolver.SetResolver(new NinjectDependencyResolver(CreateKernel()));
        Bootstrapper.Bootstrap();
    }
}

И мой метод CreateKernel:

public static IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Load(Assembly.GetExecutingAssembly());
    return kernel;
}

Мне нужно использовать атрибут [Inject] в моем RoleService, который использует RoleProvider и запускается asp.net.

Все говорят, что если я наследую от NinjectHttpApplication в моем Global.asax мне не нужна эта строка: DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); в моем OnApplicationStarted методе, но без этого генерируется исключение, и моя зависимость NULL в моей службе RoleProvider.

В конце концов, мне нужна эта строка или нет?Я что-то не так делаю?

1 Ответ

2 голосов
/ 04 августа 2011

DependencyResolver устанавливается расширением во время запуска. Если служба создается до ApplicationStart, будет использоваться служба по умолчанию. Из вашего кода я не могу сказать, когда он будет создан. Но обычно эта строка не требуется.

Вы также можете попробовать использовать способ NuGet для интеграции Ninject. Это запустит Ninject Kernel и DependencyResolver чуть раньше.

...