public object GetWcfInstance<T>(string endPointName)
{
            ChannelFactory<T> channelFactory = new ChannelFactory<T>(endPointName);   
            return channelFactory.CreateChannel();
}其中ChannelFactory是第三方的库。如果使用时:
GetWcfInstance<IMyService>("Hello");  可以成功。但是有个问题就是,如果服务多的话就要在代码中不断的加。我现在想实现类似:
Type t = typeof(IMyService);   //Type可以通过配置文件等来获取,这样就方便了。但是: IMyService 转 Type t容易,可要由T转IMyService我却没办法,有谁知道的请指教。如果可以,我就能实现类似如下重载:public object GetWcfInstance(Type t, string endPointName)
{
    //。
   
                //ChannelFactory<T> channelFactory = new ChannelFactory<T>(endPointName);   
            //return channelFactory.CreateChannel();
}

解决方案 »

  1.   

    首先,方法声明应改为...public T GetWcfInstance<T>(...其次,用泛型是为了强类型化而不是用来当万金油...不明白泛型就多看看MSDN,不要自己想当然...
      

  2.   

    关键是思路,不要局限于它那个工厂:
    从GetWcfInstance<T>(string endPointName)方法是不能下手了,可以在库中找到每个类型的详细定义,绕开他的这个工厂,用每个类来反射建立就可以了每个详细的类定义是基础,而工厂模式只是建立在这些基础之上的具体应用, 意思就是说,你使用那些底层的/基础的详细类定义,自己写一套反射创建类实例的工厂,替代它那个貌似泛型又返回object的工厂
      

  3.   

    不错泛型方法又用object,实在是太,lz如何知道T转IMyService是合法的呢
      

  4.   


    大家不要被这个函数的错误设计,而忘记本贴的主要目的。
    本帖的主要目的,是如何在非泛型中使用泛的问题。
    public T GetWcfInstance<T>(...
    固然正正确,说真我们暂且别去考虑其返回值的问题。
    之所GetWcfInstance<T>要定义成泛型,是因为其内部ChannelFactory<T> 泛型。1:本帖想要解决的问题是非泛型函数对泛型的应用。
    即:GetWcfInstance(Type t),中如何来实现对ChannelFactory<T>的合法构造。
    即解决“Type t = typeof(T);”的逆过程。2:至于有人提出“T转IMyService的合法”性,并非本帖讨论的重点,因为这在很多IOC中并不进行显示控制。
      

  5.   


        Type t=typeof(T);
        if (t.GetInterface(T) != null)
        {
            //t is typeof T
            break;
        }