Я недавно создал сервисную библиотеку WCF.Я планирую разместить его в IIS.Поскольку я хочу повторно использовать свой слой репозитория, я решил использовать Ninject и в своем сервисе WCF (я использую его в других проектах решения).
Я установил расширения Ninject Wcf.Я настроил его с помощью NinjectServiceHostFactory в файле SVC.Я добавил файл Global.asax для переопределения CreateKernel (), который наследуется от NinjectWcfApplication, но я не уверен, правильно ли я использую привязки.Сначала я начал с:
Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
Но я быстро понял, что это не работает, так как данные не были сохранены в моей базе данных.Похоже, что служба WCF не использует конвейер ASP.NET.Я попробовал и то и другое, чтобы убедиться, что мои данные переданы в базу данных:
Bind<IUnitOfWork>().To<UnitOfWork>().InThreadScope();
Bind<IUnitOfWork>().To<UnitOfWork>().InTransientScope();
Не повезло.Затем я решил попробовать:
Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope();
Это сработало, но я не хочу, чтобы контекст моей базы данных использовался для каждого отдельного запроса, поступающего в службу WCF.Затем я провел некоторое исследование и нашел следующий подход:
Bind<IUnitOfWork>().To<UnitOfWork>().InScope(c => OperationContext.Current);
Это работает, но верно ли это?Я хочу кое-что напомнить InRequestScope для приложения MVC.Каждый запрос к службе должен получить собственный контекст базы данных.