zoukankan      html  css  js  c++  java
  • C#关于反射加载的问题

    三个程序集: 
    主程序集: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) 
    {//无法识别两个模块的接口。 



  • 相关阅读:
    Android 黑科技保活实现原理揭秘
    Flutter +携程=?
    图解设计模式-Prototype模式
    图解设计模式-Singleton模式
    比较B-tree索引与Hash索引
    类元数据Class Metadata
    DriverManager类
    XMLMapperBuilder类
    PooledDataSource类
    Java并发编程的艺术(笔记)
  • 原文地址:https://www.cnblogs.com/smilesmile/p/3790948.html
Copyright © 2011-2022 走看看