有关Type与泛型

showjancn 2011-01-11 11:42:31
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();
}

...全文
218 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
TimZhuFaith 2011-01-11
  • 打赏
  • 举报
回复
不错。。。泛型方法又用object,实在是太,lz如何知道T转IMyService是合法的呢[Quote=引用 2 楼 vrhero 的回复:]
首先,方法声明应改为...

public T GetWcfInstance<T>(...

其次,用泛型是为了强类型化而不是用来当万金油...

不明白泛型就多看看MSDN,不要自己想当然...
[/Quote]
  • 打赏
  • 举报
回复
关键是思路,不要局限于它那个工厂:
从GetWcfInstance<T>(string endPointName)方法是不能下手了,可以在库中找到每个类型的详细定义,绕开他的这个工厂,用每个类来反射建立就可以了

每个详细的类定义是基础,而工厂模式只是建立在这些基础之上的具体应用, 意思就是说,你使用那些底层的/基础的详细类定义,自己写一套反射创建类实例的工厂,替代它那个貌似泛型又返回object的工厂

vrhero 2011-01-11
  • 打赏
  • 举报
回复
首先,方法声明应改为...

public T GetWcfInstance<T>(...

其次,用泛型是为了强类型化而不是用来当万金油...

不明白泛型就多看看MSDN,不要自己想当然...
ShinNakoruru 2011-01-11
  • 打赏
  • 举报
回复

Type t=typeof(T);
if (t.GetInterface(T) != null)
{
//t is typeof T
break;
}
showjancn 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 timzhufaith 的回复:]
不错。。。泛型方法又用object,实在是太,lz如何知道T转IMyService是合法的呢

引用 2 楼 vrhero 的回复:
首先,方法声明应改为...

public T GetWcfInstance<T>(...

其次,用泛型是为了强类型化而不是用来当万金油...

不明白泛型就多看看MSDN,不要自己想当然...
[/Quote]

大家不要被这个函数的错误设计,而忘记本贴的主要目的。
本帖的主要目的,是如何在非泛型中使用泛的问题。
public T GetWcfInstance<T>(...
固然正正确,说真我们暂且别去考虑其返回值的问题。
之所GetWcfInstance<T>要定义成泛型,是因为其内部ChannelFactory<T> 泛型。

1:本帖想要解决的问题是非泛型函数对泛型的应用。
即:GetWcfInstance(Type t),中如何来实现对ChannelFactory<T>的合法构造。
即解决“Type t = typeof(T);”的逆过程。

2:至于有人提出“T转IMyService的合法”性,并非本帖讨论的重点,因为这在很多IOC中并不进行显示控制。



110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧