问题描述
- C# 接口 反射 奇怪的问题
-
1、定义一个接口,用于获取用户的功能点。因为有些项目中甲方有自己的权限平台,所以这里反接口开放出来。
public interface IUserFuns
{
List GetFunCodes(string userID);
}
2。我的系统中也自己做了一套授权功能。实现1中的接口
public List GetFunCodes(string userID)
{
List modules = new List();
modules.Add("0000");
modules.Add("0001");
modules.Add("0002");
modules.Add("0003");
modules.Add("0004");
return modules;
}
} 这只是用来测试的。
3、 接口开放在配置文件里,<!---->
4、根据配置文件的信息,获取功能点权限
//获取类信息 动态调用
Assembly asb = Assembly.LoadFile(assName);
object obj = asb.CreateInstance(section.TypeName);
if (typeof(IUserFuns).IsInstanceOfType(obj))
{
IUserFuns module = obj as IUserFuns;
listCodes = module.GetFunCodes(userID);
}
assName是实现接口的文件的全路径名称section.TypeName是实现接口的类的全名称,命名空间命+类名
5、问题:4中的判断,if (typeof(IUserFuns).IsInstanceOfType(obj))
如果obj跟IUserFuns在同一个项目中typeof(IUserFuns).IsInstanceOfType(obj)就是false,如果obj跟IUserFuns不在同一个项目中,typeof(IUserFuns).IsInstanceOfType(obj)就是true,这是为什么?
解决方案
本来就是这样,要么放在一个项目中,要么强签名后注册到gac中。
解决方案二:
但是我在控制台应用程序中这样做是可以的啊?
解决方案三:
用 if ( obj is IUserFuns ) 试试看。