Я создаю службу WCF, размещенную на службе Windows, как описано здесь: https://msdn.microsoft.com/en-us/library/ms733069(v=vs.110).aspx.Инъекция зависимостей (с использованием простой инжектора) в службе WCF, размещенной в управляемой службе Windows.
У меня есть некоторые зависимости.
Какой бы правильный способ применить DI здесь, используя простой Inyector.
Я читал о классе SimpleInjectorServiceHostFactory здесь https://simpleinjector.readthedocs.org/en/latest/wcfintegration.html, но, похоже, он работает только для хостинговых служб IIS.
На первом примере я предполагаю, что я регистрирую типы по методу Main(), но как мне создать ServiceBase?
И что более важно, как я могу вызвать (или создать) экземпляр servicehost. Должен ли я получить контейнер откуда-то и напрямую создать экземпляр реального сервиса, используя его. Это кажется довольно уродливый для меня
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}
// Create a ServiceHost for the CalculatorService type using the
// container directly
serviceHost = serviceHost = new ServiceHost(container.GetInstance<ICalculatorService>());
serviceHost.Open();
}
Я предлагаю вам взглянуть на книгу [Инъекция зависимостей в .NET] (https://www.manning.com/books/dependency-injection-in-dot-net). В разделе 7.3 подробно описано, как настроить WCF для DI (это не то, что я сделал, поэтому я просто оставляю комментарий). Мне полезно создавать свои собственные интеграционные компоненты DI, потому что часто (как и в вашем случае) акции сторонних сторон не подходят для использования вашего приложения, и книга рассказывает вам, как построить такую интеграцию с WCF. – NightOwl888
Я согласен с NightOwl. У меня никогда не было проблем с WCF, потому что я использую классы обслуживания WCF как смиренные объекты и рассматриваю их как часть моего корня композиции. Это означает, что мои службы WCF не содержат логики приложения и просто разрешают службу из контейнера, который содержит логику. – Steven
[этот пост] (https://cuttingedge.it/blogs/steven/pivot/entry.php?id=95) может быть вам полезен ... – qujck