PlugLoader 2017.7.3 Fix

    public class PlugLoader
    {
        private List<Assembly> pAssembly = new List<Assembly>();


        public Assembly LoaderDLL(string DllPath)
        {
            try
            {
                Assembly assembly = null;


                if (File.Exists(DllPath))
                {
                    List<Assembly> pSearch = pAssembly.Select((c) => { return (c.Modules.Count() > 0 ? c.Modules.ToList()[0].Name : "") == DllPath ? c : null; }).ToList();


                    if (pSearch.Count == 0)
                    {
                        assembly = Assembly.LoadFrom(DllPath);


                        pAssembly.Add(assembly);
                    }
                    else
                    {
                        assembly = pSearch.First();
                    }
                }


                return assembly;
            }
            catch
            {
                return null;
            }
        }


        public T LoadLibrary<T>(string DllPath) where T : class
        {
            Assembly assembly = LoaderDLL(DllPath);


            if (assembly == null)
                return null;


            Type type = null;


            Type pFindType = typeof(T);


            foreach (Type pType in assembly.GetTypes())
            {
                Boolean bInterface = pFindType.IsAssignableFrom(pType);
                if ((pType is T) || bInterface)
                {
                    type = pType;
                    break;
                }
            }


            if (type == null)
                return null;


            T tVar = assembly.CreateInstance(type.FullName) as T;


            return tVar;
        }
    }


附上测试代码

    public interface IPlug
    {
        void ShowForm();
    }

    public partial class Form1 : Form, IPlug
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void ShowForm()
        {
            this.ShowDialog();
        }
    }

            PlugLoader pLoader = new PlugLoader();

            IPlug pPlug = pLoader.LoadLibrary<IPlug>("TestLib.dll");
            //pPlug.ShowForm();

            IPlug pPlug1 = pLoader.LoadLibrary<IPlug>("TestLib.dll");
            pPlug1.ShowForm();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值