У меня есть несколько служб WCF, размещенных в IIS и настроенных с помощью Autofac.
Global.asax
var builder = new ContainerBuilder();
builder.RegisterType<ServiceA>();
builder.RegisterType<ServiceB>();
builder.RegisterType<ServiceC>();
var container = builder.Build();
AutofacHostFactory.Container = container;
web.config
<system.serviceModel>
...
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
<serviceActivations>
<add service="ServiceA, MyServicesAssembly" relativeAddress="./ServiceA.svc" factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" />
<add service="ServiceB, MyServicesAssembly" relativeAddress="./ServiceB.svc" factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" />
<add service="ServiceC, MyServicesAssembly" relativeAddress="./ServiceC.svc" factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" />
</serviceActivations>
</serviceHostingEnvironment>
<system.serviceModel>
Реализации службы
public class ServiceA : IServiceA
{
public ServiceA()
{
}
}
public class ServiceB : IServiceB
{
public ServiceB()
{
}
}
public class ServiceC : IServiceC
{
public ServiceC(IServiceA serviceA)
{
}
}
Как видите, ServiceC отличается от других и нуждается в реализации IServiceA.Autofac не может решить эту проблему, потому что для IServiceA нет регистрации.
Поэтому я изменяю регистрацию на это:
builder.RegisterType<ServiceA>().As<IServiceA>();
Autofac теперь может успешно разрешать ServiceC, но хостинг WCFбольше не работает:
Исключение типа 'System.ServiceModel.ServiceActivationException' произошло в mscorlib.dll, но не было обработано в коде пользователя
Так что мойвопрос:
Есть ли способ, которым я могу иметь как размещенный экземпляр службы WCF, так и возможность передать реализацию службы в другую службу?Все настроено с помощью AutoFac?Я также думаю об обходном пути, но все, что приходит мне в голову, приводит к огромным усилиям.Я знаю, что эти сервисы необходимо реорганизовать, чтобы не было необходимости переходить в другой «сервис».Но это другая история.