2016-06-01 4 views
1

У меня есть служба WCF, которая открывается через net.pipe. Эта служба размещена так:Внедрение зависимостей WCF без SVC-файла

var hosturi = new Uri("net.pipe://localhost/somewhere"); 
var host = new ServiceHost(typeof(Service), hosturi); 
var serviceBinding = new NetNamedPipeBinding 
{ 
    MaxReceivedMessageSize = int.MaxValue, // and maybe something else 
}; 

serviceBinding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas 
{ 
    MaxArrayLength = int.MaxValue, // and maybe something else 
}; 

host.AddServiceEndpoint(typeof(T), serviceBinding, string.Empty); 
host.Description.Behaviors.Add(
    new ServiceThrottlingBehavior 
    { 
     MaxConcurrentCalls = 5000, 
     MaxConcurrentInstances = 5000, 
     MaxConcurrentSessions = 5000 
    } 
); 
host.Open(); 

Я хочу, чтобы указать DI завод для моего экземпляра службы получает никаких зависимостей конструктора инъекционные.

Хотя есть много статей по этому вопросу (например, здесь: https://msdn.microsoft.com/en-us/library/hh323725(v=vs.100).aspx), все они предлагают указать фабрику с использованием файла .svc.

Как это сделать в коде?

+0

@Evk Вы мне очень помогли! Это сработало. Если вы добавите свой комментарий в качестве ответа, я приму его. – zaitsman

ответ

1

Вы сами создаете хост-сервис, поэтому вам не нужен ServiceHostFactory (который является фабрикой для создания ServceHost). Поэтому просто пропустите шаги 4-6 из статьи и добавьте поведение хоста с помощью

host.Description.Behaviors.Add(new DependencyInjectionServiceBehavior());