Ninject MVC вместе с расширением WCF не работает с InRequestScope - PullRequest
5 голосов
/ 03 января 2012

Я заставил Ninject MVC работать с Ninject WCF, чтобы он заработал. Я добавил две строки в метод CreateKernel

kernel.Bind<ServiceHost>().To<NinjectServiceHost>();
KernelContainer.Kernel = kernel;

Зависимости вводятся, но метод Dispose не вызывается, я пробовал как с InRequestScope, так и с моей собственной областью применения. Func возвращает OperationContext.Current как объект Scope, но удаление не вызывается.

Обновление 2012-09-05 Эта информация устарела, для загрузки MVC и WCF из Nuget Ninject.MV3 и Ninject.Extensions.WCF (3.x) шаблон Nuget MVC добавит загрузчик Ninject NinjectWebCommon.cs и добавит поддержку в svc для удаления текста и редактирования svc xml (щелкните правой кнопкой мыши / Просмотреть разметку) и добавьте Factory = "Ninject.Extensions.Wcf.NinjectServiceHostFactory" в узел xml

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Я не могу ответить на ответ Ремо, потому что я - стековый поток n00b, но проблема с исключением «System.Runtime.CompilerServices.ExtensionAttribute» заключается в том, что он перешел из System.Core в .net 4.0 в mscorlib. нетто 4.5. Если вы установите .net 4.5, проблема исчезнет. Я думаю, что-то было построено с .net 4.5 в миксе. https://github.com/ninject/Ninject.Web.Common/issues/3 Похоже, это будет исправлено в ближайшее время. Что касается проблемы с Wcf InRequestScope, то сегодня Римо дал мне некоторую помощь по группам Google ... «добавьте новый модуль, производный от« Ninject.GlobalKernelRegistrationModule », и загрузите его в ядро. Хотя это будет исправлено в финальной версии».

т.е. что-то вроде ...

public class MyModule : Ninject.GlobalKernelRegistrationModule<WcfRequestScopeCleanup>
{
}

//And where you load your modules...
kernel.Load<MyModule>();
2 голосов
/ 03 января 2012

Я рекомендую использовать Ninject 3.0.0-rc2, доступный от Nuget. InRequestScope работает как для веб-запросов, так и для WCF-запросов.

...