关于C#泛型及反射调用的问题?
时间:2011-12-12
来源:互联网
Test.exe
{
FrmMain //类
}
Core.dll
{
ITestModule<IContract,Implement> //接口
}
TestModule.dll.
{
ITestService //类
TestService:ITestService //类
ModuleA:ITestModule<ITestService,TestService> //继承接口ITestModule<IContract,Implement>
}
我想在Frmain类中调用一个StartWCF<IContract,Implement>()的方法,
请问我在不知道TestModule.dll的情况下,是否可以用反射将ITestService,和TestService传给StartWCF方法,谢谢了。这里TestModule.dll的存放位置和ModuleA的类名可以通过配置文件告诉FrmMain.
下边是我画的UML类图。
http://hi.csdn.net/space-2425583-do-album-picid-1006718.html
作者: wmt85 发布时间: 2011-12-12
foreach (string file in Directory.GetFiles(Environment.CurrentDirectory,"*.dll")) { try { foreach (Type type in Assembly.LoadFile(file).GetTypes()) { Type[] interfaces = type.GetInterfaces(); bool find = false; foreach (var parent in interfaces) { if(!parent.IsGenericType)continue; var definition = parent.GetGenericTypeDefinition(); if (definition == typeof (ITestModule<,>)) { MessageBox.Show(type.GetMethod("ToString").Invoke(Activator.CreateInstance(type), Type.EmptyTypes).ToString()); find = true; break; } } if(find) break; } } catch (Exception) { } }
作者: JulioHuang 发布时间: 2011-12-12
假设TestModel在执行目录C# code
foreach (string file in Directory.GetFiles(Environment.CurrentDirectory,"*.dll"))
{
try
{
foreach (Type type ……
顶了...
作者: chenandczh 发布时间: 2011-12-12
TestModule.dll的存放位置和ModuleA的类名可以通过配置文件告诉FrmMain
----------------------
如果FrmMain中可以访问到相关位置的文件的话,那么是可以的。
作者: Sandy945 发布时间: 2011-12-12
作者: Sandy945 发布时间: 2011-12-12
作者: fangxinggood 发布时间: 2011-12-12
解决方案是 控制反转(IOC) 也叫 依赖注入(DI)
我想你是想把接口都声明在core中,而把实现放在TestModule中,而Test.exe则只是个载体
从你的类库的物理角度来说,依赖关系必须是这样(引用关系)
Test.exe -> core.dll <-----
| \
\--------------> TestModule
而Test.exe对testModule的依赖是你不希望出现的。
这就是控制反转要解决的问题。
实现方法是,通过Text.exe的配置文件来指定,Test.exe在运行时创建core.dll中的具体实现,当然用的是反射。
而至于泛型参数,那必须是编译器确定的问题,不添加DLL的引用就无法确定具体类型
可以考虑StartWCF(Type t1, Type t2)
作者: Icedmilk 发布时间: 2011-12-12
可以考虑StartWCF(Type t1, Type t2)
--------
说的对, ITestModule<IContract,Implement> 如果是通过反射创建,无法类型化。
泛型的作用也看不出来。
作者: fangxinggood 发布时间: 2011-12-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28