WCF服务的Unity依赖注入

时间:2010-09-21 20:29:43

标签: dependency-injection wcf unity-container

有人可以指导我为WCF服务提供Unity Dependency Injection的好例子吗? 任何博客或msdn文章也会有所帮助。

3 个答案:

答案 0 :(得分:5)

要将依赖项注入WCF服务,我必须实现服务主机工厂。

我找到了一步一步的教程here

基本上你必须:

  1. 实施IInstanceProvider以使用容器
  2. 创建服务
  3. 实施IServiceBehavior以在端点调度程序中设置实例提供程序
  4. 扩展ServiceHost以添加新的服务行为
  5. 扩展ServiceHostFactory以创建新服务主机

答案 1 :(得分:5)

This answer给出了如何使用Castle Windsor在WCF中启用DI的示例。

在示例中只需将IWindsorContainer替换为IUnityContainer,您应该全部设置,尽管您可能还想将类名从WindsorXyz更改为UnityXyz:)

答案 2 :(得分:2)

我即将尝试Unity.Wcf库(https://github.com/ViceIce/unity.wcf),乍一看看起来相当不错。我在this article读到了这个:

  

如果使用ServiceHost在Windows服务中托管WCF服务,请将ServiceHost实例替换为自定义Unity.Wcf.UnityServiceHost。您会发现UnityServiceHost将Unity容器作为其第一个参数,但在其他方面与默认的ServiceHost相同。

因为我的情况我会这样做......

   class Program
{
    static void Main(string[] args)
    {
        // 1st Initialize the Host (Configures Container and Factories)
        ServiceHostController.Initialize();

        // 2nd Create a URI to serve as the base address.
        var baseAddress = new Uri("http://localhost:54321/BlaBlaBla/");

        // 3rd Create a UnityServiceHost instance
        var myService = new UnityServiceHost(ServiceHostController.UnityContainer, typeof(MyService), baseAddress);

        try
        {  //etcetera...

它对我有用,我仍然需要重构一些东西并添加功能和方法,但起点就像一个魅力。

我希望它有所帮助。