【问题标题】:Unity Dependency Injection for WCF servicesWCF 服务的 Unity 依赖注入
【发布时间】:2010-09-21 20:29:43
【问题描述】:

有人可以指导我了解 WCF 服务的 Unity 依赖注入的一个很好的例子吗? 任何博客或 msdn 文章也会有所帮助。

【问题讨论】:

    标签: dependency-injection wcf unity-container


    【解决方案1】:

    This answer 举例说明了如何使用 Castle Windsor 在 WCF 中启用 DI。

    只需将示例中的 IWindsorContainer 替换为 IUnityContainer 即可,尽管您可能还想将类名从 WindsorXyz 更改为 UnityXyz :)

    【讨论】:

      【解决方案2】:

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

      我找到了一个分步教程here

      基本上你必须:

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

      【讨论】:

      • 那是最好的吗?我已经看过了,看起来很复杂。还有比这更简单的吗??
      • 这现在是一个死链接。
      【解决方案3】:

      我正要试一试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...
      

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

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        相关资源
        最近更新 更多