代码之家  ›  专栏  ›  技术社区  ›  Miel

将对象传递给多个服务

  •  2
  • Miel  · 技术社区  · 15 年前

    public class MyService : IMyContract
    {
        public MyType MyObject { get; set; }
    
        public MyService(MyType myObject)
        {
            this.MyObject = myObject;
        }
        // more here...
    }
    

    我希望我能这样做:

    MyType o1 = new MyType();
    MyService s1 = new MyService(o1);
    ServiceHost host1 = new ServiceHost(s1, anEndpointAddress);
    MyType o2 = new MyType();
    MyService s2 = new MyService(s2);
    ServiceHost host2 = new ServiceHost(s2, anEndpointAddress);
    

    问题是,如果您使用以对象作为第一个参数的ServiceHost构造函数,那么该对象需要是singletonstance,但我需要多个实例。

    另一方面,如果我使用以类型作为第一个参数的构造函数( ServiceHost host = new ServiceHost(typeof(MyService), endpointAddress); ),我不知道如何将MyObject设置为合适的值。

    谢谢,问候,米尔。

    2 回复  |  直到 15 年前
        1
  •  3
  •   VinayC    15 年前

    我可以想到两种方法-方法2将是首选的方法。

    1. 创建多个简单地从服务类继承的类。例如,

      public class MyService1 : MyService { 
      ... // put a constructor that accepts your object 
      }
      public class MyService2 : MyService { ...  }
      
      ...
      

    现在作为主持人

    MyType o1 = new MyType();
    MyService s1 = new MyService1(o1);
    ServiceHost host1 = new ServiceHost(s1, anEndpointAddress);
    MyType o2 = new MyType();
    MyService s2 = new MyService2(s2);
    ServiceHost host2 = new ServiceHost(s2, anEndpointAddress);
    

     public class MyService1 : MyService
    {
       public MyService1() : base(new MyType()) { }
    }
    

    然后使用另一个服务主机构造函数

    ServiceHost host1 = new ServiceHost(typeof(MyService1), anEndpointAddress);
    

    2我更喜欢这种方法。

    public class MyServiceHost : ServiceHost
    {
        public MyType MyObject { get; private set; }
    
       public MyServiceHost(Type serviceType, Uri[] baseAddresses, MyType myObject) 
         :base(serviceType, baseAddresses)
       {
         this.MyObject = myObject;
       }
    }
    

    现在,使用

    MyType o1 = new MyType();
    ServiceHost host1 = new MyServiceHost(typeof(MyService, anEndpointAddress, o1);
    

    OperationContext.Current.Host 要获取servicehost和hostm,您可以获取您的对象。

        2
  •  0
  •   Aliostad    15 年前

    ServiceHost .

    然后通过实施 IServiceBehavior 和修改 ChannelDispatchers

    http://msdn.microsoft.com/en-us/library/aa395224.aspx