WCF использует Reflection для создания экземпляра службы, поэтому, если у вашей службы нет конструктора без параметров, wcf не сможет создать экземпляр службы, поэтому wcf выдает ошибку.
Интегрировать внедрение нелегкофреймворк с wcf.
Вы должны настроить провайдера экземпляра (который предоставляет экземпляр сервиса wcf).
https://blogs.msdn.microsoft.com/carlosfigueira/2011/05/31/wcf-extensibility-iinstanceprovider/
В своем провайдере настраиваемого экземпляра вы можете предоставить свою внедренную услугуэкземпляр в методе GetInstance.
Затем вы должны заставить wcf использовать свой собственный поставщик экземпляра, используя поведение службы.
Например,
public class MyServiceAttribute : Attribute, IServiceBehavior
{
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher item in serviceHostBase.ChannelDispatchers)
{
foreach (EndpointDispatcher item1 in item.Endpoints)
{
item1.DispatchRuntime.InstanceProvider = new MyInstanceProvider(); // apply customized instanceProvider
}
}
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}
Затем вы должны настроить ServiceHost наприменить сервисное поведение.Как и
public class MyUnityServiceHost : ServiceHost
{
protected MyUnityServiceHost()
{
}
protected override void OnOpening()
{
base.OnOpening();
if (this.Description.Behaviors.Find<MyServiceAttribute >() == null)
{
this.Description.Behaviors.Add(new MyServiceAttribute ());//add your behavior
}
}
}
Наконец, вы должны настроить HostFactory, чтобы создать свой собственный сервис-хост.https://blogs.msdn.microsoft.com/carlosfigueira/2011/06/13/wcf-extensibility-servicehostfactory/
Вы можете сослаться на подобное обсуждение ниже.
Внедрение данных в службу WCF