C#关于反射加载的问题_C#教程-查字典教程网
C#关于反射加载的问题
C#关于反射加载的问题
发布时间:2016-12-28 来源:查字典编辑
摘要:三个程序集:主程序集:BaseApp.exe接口程序集:IBaseApplication插件程序集:TestAttri===========...

三个程序集:

主程序集:BaseApp.exe

接口程序集:IBaseApplication

插件程序集:TestAttri

=======================================================================================

在接口程序中:

接口:IApp

属性定义:ModuleAttribute

复制代码 代码如下:

public interface IApp : IMothed

{

void ParentForm(IApp frm);

}

namespace IBaseApplication.Attributes

{

[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Interface | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = true, Inherited = false)]

public class ModuleAttribute : Attribute

{

public string IdName { get; set; }

public string ModuleName { get; set; }

public Type ModuleType { get; set; }

//public string AsmName { get; set; }

//public string ClassName { get; set; }

public string Description { get; set; }

}

}

在插件程序集中:

在该插件程序集中的AssemblyInfo类中标识如下

复制代码 代码如下:

[assembly: IBaseApplication.Attributes.Module(ModuleType = typeof(UserControl1), IdName = "be4d9a5b-0455-4e9d-a255-25122b80bef1-UserControl1", ModuleName = "UserControl1", Description = "")]

[assembly: IBaseApplication.Attributes.Module(ModuleType = typeof(UserControl2), IdName = "be4d9a5b-0455-4e9d-a255-25122b80bef1-UserControl2", ModuleName = "UserControl2", Description = "")]

有两个模块分别是以下

复制代码 代码如下:

namespace TestAttri

{

public partial class UserControl1 : UserControl, IApp

{

……

}

}

namespace TestAttri

{

public partial class UserControl2 : UserControl, IApp

{

……

}

}

=================================================================================================

在主程序集中:

将插件放至到:Application.StartupPath + "Plus"

引用了接口程序集“IBaseApplication”

复制代码 代码如下:

/// <summary>

/// 获取插件文件名称

/// </summary>

/// <returns></returns>

public string[] GetPlusFiles()

{

return System.IO.Directory.GetFiles(Application.StartupPath + "Plus");

}

/// <summary>

/// 加载插件

/// </summary>

public void LoadPluFiles()

{

string[] files = GetPlusFiles();

Assembly assembly = Assembly.GetCallingAssembly();

foreach (string file in files)

{

ModuleAttribute[] attributes = Assembly.LoadFile(file).GetCustomAttributes(typeof(ModuleAttribute), false) as ModuleAttribute[];

foreach (ModuleAttribute attribute in attributes)

{

string m = attribute.ModuleType.FullName;

string m1 = attribute.ModuleType.Assembly.GetName().Name;

object obj = Activator.CreateInstance(attribute.ModuleType);

if (obj is IApp)

{//无法识别两个模块的接口。

}

}

}

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类