Может ли кто-нибудь направить меня к хорошему примеру внедрения зависимостей Unity для служб WCF? Также поможет любой блог или статья msdn.
Внедрение зависимостей Unity для служб WCF
Ответы (3)
В этом ответе приведен пример включения DI в WCF. с Замком Виндзор.
Просто замените IWindsorContainer на IUnityContainer в примере, и все будет готово, хотя вы также можете изменить имена классов с WindsorXyz на UnityXyz :)
Чтобы внедрить зависимости в службы WCF, мне пришлось реализовать фабрику узлов службы.
Я нашел пошаговое руководство здесь.
В основном вам необходимо:
- Реализуйте IInstanceProvider для создания сервисов с использованием контейнера.
- Реализуйте IServiceBehavior, чтобы установить поставщик экземпляра в диспетчере конечных точек.
- Расширьте ServiceHost, чтобы добавить новое поведение службы
- Расширьте ServiceHostFactory, чтобы создать новый узел службы
Я собираюсь попробовать библиотеку Unity.Wcf (https://github.com/ViceIce/unity.wcf), на первый взгляд выглядит неплохо. Я читал в эту статью эту:
Если вы размещаете свою службу WCF в службе Windows с помощью ServiceHost, замените экземпляр ServiceHost пользовательским Unity.Wcf.UnityServiceHost. Вы обнаружите, что UnityServiceHost принимает контейнер Unity в качестве первого параметра, но в остальном идентичен ServiceHost по умолчанию.
В моем случае я сделаю это ...
class Program
{
static void Main(string[] args)
{
// 1st Initialize the Host (Configures Container and Factories)
ServiceHostController.Initialize();
// 2nd Create a URI to serve as the base address.
var baseAddress = new Uri("http://localhost:54321/BlaBlaBla/");
// 3rd Create a UnityServiceHost instance
var myService = new UnityServiceHost(ServiceHostController.UnityContainer, typeof(MyService), baseAddress);
try
{ //etcetera...
И это сработало для меня, мне все еще нужно реорганизовать некоторые вещи и добавить функции и методы, но отправная точка работает как шарм.
Я надеюсь, что это помогает.