日期:2014-05-18  浏览次数:20881 次

C# 模块化开发技术讨论
请问C#怎么来开发模块化的程序。只想请教大概的原理,谈谈大框架。我觉得是不是用反射和类封装调用还是什么?请老鸟进来讨论!!!

------解决方案--------------------
定义接口比如
public interface Ixxx
{
...
...


然后在程序中相应的地方使用这个接口,至于接口实例可以如下实现,这样可以让系统支持插件,便于二次开发和功能扩展。实际的应用中如果提供二次开发比如像word那样可以在主程序中挂接二次开发的菜单,那么你可以在接口中定义这些菜单和事件,下面的代码包含了如何将一个dll文件动态的转换为实例,这些代码比较简单,实际应用中可能相对会复杂一些,这要看你需要实现的功能,希望对你有帮助。

这儿读取你所有的二次开发插件,插件后缀名你自己定,实际上就是dll文件
string Files = System.IO.Directory.GetFiles(Path + "\\addin", "*.pug");

foreach (string file in Files)
{
这儿根据文件反射为程序集
Assembly a = System.Reflection.Assembly.LoadFile(file); 
if (a != null)
{
Type[] Types = a.GetTypes();
for (int i = 0; i < Types.Length ; i++)
{

查找包含Ixxx接口的type,如果有命名空间则查询的字符串包含命名空间比如:zzz.Ixxx
Type t= Types [i].GetInterface("Ixxx");


这儿的obj就是你的Ixxx接口对象实例。
Ixxx obj = (Ixxx)Activator.CreateInstance(Type);

}

}
}
------解决方案--------------------
感觉使用MEF甚至是MAF这类比较成熟的解决方案都要比自己做反射要好很多。
------解决方案--------------------
是啊 不是有MEF么 可以试试的 
或者看下这个
插件开发代码