Ninject + WCF Issue - PullRequest
       14

Ninject + WCF Issue

0 голосов
/ 12 июля 2011

Я пытаюсь использовать Ninject с моей службой WCF. Я использую Ninject 2.2.1.4 и Ninject.Extensions.Wcf 2.2.0.4. Мой модульный тест для проверки правильности работы Ninject завершается с ArgumentNullException; Корень параметра: ноль.

Вот мой код:

  //A couple of classes to setup ninject and its bindings
 public class NinjectBindings : NinjectModule
{
    public override void Load()
    {
        Bind<IEmployeeRepository>().To<SqlEmployeeRepository>().InSingletonScope();
    }

}

 public class Global : NinjectWcfApplication
{       
    protected override IKernel CreateKernel()
    {
        IKernel kernel = new StandardKernel(new NinjectBindings());
        return kernel;
    }
}

//Test method that fails with ArgumentNullException
  [TestMethod]
    public void Should_Be_Able_To_Get_Employee_Service_From_Ninject()
    {
        Global globalService = new Global();

        var kernel = globalService.Kernel;

        EmployeeService employeeService = kernel.Get<EmployeeService>();

        Assert.IsNotNull(employeeService);
    }

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

После создания Global вы должны правильно инициализировать его, вызывая Application_Start() и Init(), как это делает IIS. После этого ваш интеграционный тест должен запуститься.

Но имейте в виду, что на самом деле kernel.Get не запускается напрямую, как вы это делаете в своем тесте. Создание сервиса намного сложнее.

0 голосов
/ 12 июля 2011

При использовании Ninject.Wcf ваш Global не получает new d, как вы сделали - вы говорите WCF, что фабрика для создания Global - ~ NinjectWcfHostFactory, которая вызывает CreateKernel(), которого не происходит вваш контекст.

В этом примере показано переопределение фабрики (в свойствах объявления службы в файле .svc).

...