Я пытаюсь взломать WCF с инъекцией зависимости. Все примеры, которые я нашел, основаны на предположениях, что вы либо используете службу .svc (ServiceHostFactory), либо используете app.config для настройки контейнера. Другие примеры также основаны на том, что контейнер передается классам.WCF и Unity - Injection Dependency
Я хотел бы получить решение, в котором контейнер не проходит (не тесно связан с Unity). Где я не использую конфигурационный файл для настройки контейнера и где я использую самообслуживаемые службы.
Проблема - как я вижу, - что ServiceHost использует тип реализации службы в качестве параметра, и что он делает, чтобы использовать InstanceProvider?
Решение, к которому я пришел в данный момент, заключается в регистрации ServiceHost (или специализации) регистра типа с именем (например, container.RegisterInstance<Type>("ServiceName", typeof(Service);
).
А затем container.RegisterType<UnityServiceHost>(new InjectionConstructor(new ResolvedParameter<Type>("ServiceName")));
для регистрации ServiceHost.
Любые лучшие решения там? Я, наверное, в моих предположениях.
С наилучшими пожеланиями,
Майкл
Да, мне не нравится проходить вокруг контейнера. Вместо этого я попытаюсь использовать дженерики. – Michael
В какой момент времени GetInstance вызывает InstanceProvider? Когда я открываю хост службы? – Michael
Вы будете пропускать контейнер только в тех трех классах WCF (ServiceHostFactory, ServiceHost и IInstanceProvider). Это вряд ли является анти-шаблоном Service Locator - это просто инфраструктура DI. Вы даже можете создать универсальную библиотеку, которая обертывает Unity. WcfFacility Castle Windsor делает именно это. Чтобы ответить на ваш другой вопрос: GetInstance вызывается каждый раз, когда вызывается операция службы. –