zoukankan      html  css  js  c++  java
  • 插件开发

        public class Loader {
    
            public IEnumerable<Type> AllTypes { get; set; }
            private List<object> allInstances = new List<object>();
    
            public event EventHandler<UnhandledExceptionEventArgs> LoadingError;
    
            public void LoadFromFolder(string folder) =>
                AllTypes = Directory.GetFiles(folder, "*.dll").SelectMany(f => {
                    IEnumerable<Type> ts;
                    try {
                        ts = Assembly.LoadFile(f).ExportedTypes;
                    } catch {
                        return Enumerable.Empty<Type>();
                    }
                    return ts;
                });
    
            public T Instance<T>() =>
                Instances<T>(false, t => true).FirstOrDefault();
    
            public IEnumerable<T> Instances<T>() =>
                Instances<T>(false, t => true);
    
            public T Instance<T>(bool createNew, Func<T, bool> filter) =>
                Instances(createNew, filter).FirstOrDefault();
    
            public IEnumerable<T> Instances<T>(bool createNew, Func<T, bool> filter) {
                var bt = typeof(T);
                var ii = bt.IsInterface;
                return from type in AllTypes
                       where !type.IsInterface && !type.IsAbstract && (ii ? type.GetInterfaces().Contains(bt) : type.IsSubclassOf(bt))
                       let r = (T)create(type, createNew)
                       where filter(r)
                       select r;
            }
    
            private object create(Type type, bool createNew) {
                var r = allInstances.FirstOrDefault(i => i.GetType() == type) ?? Activator.CreateInstance(type);
                if (createNew) {
                    allInstances.Remove(r);
                }
                allInstances.Add(r);
                return r;
            }
        }
  • 相关阅读:
    SQL Server 2005 全文搜索包括改进和更新的干扰词文件FROM MS KB
    服务器内存选项From MS
    跳过事务复制中的错误
    WP7基础补充
    TaoBaoAPI简介3
    登录功能代码
    TaoBaoApI简介1
    TaoBaoAPI简介2
    WP7基础学习第十三讲
    WP7基础学习第十四讲
  • 原文地址:https://www.cnblogs.com/ly45/p/6918690.html
Copyright © 2011-2022 走看看