У меня есть единство контейнер:Почему сервер службы Unity.Wcf не может правильно решить проблему?
var unityContainer = new UnityContainer();
настроен следующим образом:
unityContainer.RegisterType<IExampleDomainService, ExampleDomainService>();
unityContainer.RegisterType<IExampleWebService, ExampleWebService>();
ExampleWebService
типа и его конструктора выглядит следующим образом:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class ExampleWebService
{
public ExampleWebService(IExampleDomainService exampleDomainService)
{
this.exampleDomainService = exampleDomainService;
}
// ...
и ExampleDomainService
не имеет конструктора определена (по проблема такая же, когда я явно определяю конструктор без параметров для этого типа).
Далее, как описано в Unity.Wcf-х documentation:
Если вы хостинг вашей службы WCF внутри службы Windows с помощью
ServiceHost
, замените экземплярServiceHost
с обычаемUnity.Wcf.UnityServiceHost
. Вы обнаружите, чтоUnityServiceHost
берет в контейнере Unity в качестве первого параметра, но в остальном идентичен по умолчаниюServiceHost
.
я сделать следующее:
var host = new UnityServiceHost(unityContainer, typeof(ExampleWebService), baseAddress);
Это, однако, проливает System.InvalidOperationException
со следующим сообщением:
тип услуги, предоставляемые не может быть загружен в качестве службы, поскольку он не имеет default (параметр-less). Чтобы устранить проблему, добавьте конструктор по умолчанию к типу или передайте экземпляр типа на хост.
Глядя на UnityServiceHost
implementation at GitHub она проходит с учетом serviceType
(typeof(ExampleWebService)
в данном случае) непосредственно WCF родной ServiceHost
:
public sealed class UnityServiceHost : ServiceHost
{
public UnityServiceHost(IUnityContainer container, Type serviceType, params Uri[] baseAddresses)
: base(serviceType, baseAddresses)
^^^^^^^^^^^
???????????
, который, очевидно, аварии, а ServiceHost
ничего не говорит о единстве и его емкости не знают и не могут справиться когда отсутствует конструктор без параметров.
Unity.Wcf полностью поврежден для хостинга, отличного от WAS/IIS, или (надеюсь) Я делаю что-то совершенно неправильное?
Спасибо за ваш ответ, я попробую это. Не могли бы вы указать, какую версию Unity.Wcf вы используете? – BartoszKP
@BartoszKP Я тестировал https://www.nuget.org/packages/UnityWCF/2.0.5849.32640, но я думаю, что он очень похож на тот, который у вас есть – Uriil
Сторона примечания: похоже, что более старая версия на NuGet называется Unity .Wcf (обратите внимание на точку) - это тот, который я использовал. Я перешел на вашу версию, и я попытаюсь выяснить разницу между вашей реализацией и моей. – BartoszKP