Beispiel #1
0
        /// <summary>
        /// 获取未被加载过的包装类
        /// </summary>
        /// <param name="types"></param>
        /// <returns></returns>
        protected virtual IEnumerable <IExtensionWrapper> GetNewWrappersFrom(IEnumerable <Type> types)
        {
            List <IExtensionWrapper> newWrappers = new List <IExtensionWrapper>();

            foreach (var type in types)
            {
                try
                {
                    var tmp = GetWrapperFor(type);
                    if (tmp.Check())
                    {
                        tmp.Ready();
                        newWrappers.Add(tmp);
                    }
                    else
                    {
                        SLogger.Debug($"{ManagedAssembly.GetName().Name} 's librarian",
                                      "Check result is false");
                        tmp.Destory();
                    }
                }
                catch (WrapperAlreadyCreatedOnceException)
                {
                    SLogger.Debug($"{ManagedAssembly.GetName().Name} 's librarian",
                                  $"{type.Name}'s wrappers was created once,skip it");
                }
                catch (Exception ex)
                {
                    SLogger.Debug($"{ManagedAssembly.GetName().Name} 's librarian",
                                  $"an exception threw on create wappers for {type.Name}", ex);
                }
            }
            return(newWrappers);
        }
Beispiel #2
0
 /// <summary>
 /// 重载内部信息
 /// </summary>
 public virtual void Reload()
 {
     if (ManagedAssembly == null)
     {
         throw new NullReferenceException("ManagedAssembly must be setted");
     }
     Extensions = from type in ManagedAssembly.GetTypes()
                  where IsExt(type)
                  select CreateExtensionInfo(type);
 }
Beispiel #3
0
        public virtual void RefreshExtensions()
        {
            //Emtpy exist extensions record
            if (Extensions != null)
            {
                foreach (var ext in Extensions)
                {
                    var rext = new RegisteredExtensionInfo(ext, this);
                    LakeProvider.Lake.Get <ILibsManager>().Registry.Remove(rext);
                }
            }

            //Rescan and load
            Extensions = from type in ManagedAssembly.GetTypes()
                         where IsExt(type)
                         select CreateExtensionInfo(type);

            foreach (var ext in Extensions)
            {
                var rext = new RegisteredExtensionInfo(ext, this);
                LakeProvider.Lake.Get <ILibsManager>().Registry.Add(rext);
            }
        }
Beispiel #4
0
 /// <summary>
 /// 获取符合条件的拓展模块类型
 /// </summary>
 /// <returns></returns>
 protected virtual IEnumerable <Type> GetExtTypes()
 {
     return(from type in ManagedAssembly.GetTypes()
            where IsExt(type)
            select type);
 }