没有SVC文件的WCF依赖注入

时间:2016-06-01 11:30:09

标签: c# wcf inversion-of-control

我有一个通过net.pipe公开的WCF服务。此服务的托管方式如下:

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();

我想为我的Service实例指定DI工厂,并注入任何构造函数依赖项。

虽然有很多关于这个主题的文章(例如:https://msdn.microsoft.com/en-us/library/hh323725(v=vs.100).aspx),但绝对所有文章都建议使用.svc文件指定工厂。

我怎样才能在代码中执行此操作?

1 个答案:

答案 0 :(得分:1)

您自己创建服务主机,因此您不需要ServiceHostFactory(这是一个创建ServceHost的工厂)。因此,请跳过文章中的步骤4-6,并使用

向您的主机添加行为
host.Description.Behaviors.Add(new DependencyInjectionServiceBehavior());