Can I use Activator.CreateInstance with an Interface?

前端 未结 6 1478
故里飘歌
故里飘歌 2021-01-04 00:21

I have an example:

        Assembly asm = Assembly.Load(\"ClassLibrary1\");
        Type ob = asm.GetType(\"ClassLibrary1.UserControl1\");
        UserContro         


        
6条回答
  •  天涯浪人
    2021-01-04 00:54

    If the library was referenced in the project you may use:

        static public IEnumerable GetTypesFromLibrary(String library)
        {
            var MyAsemblies = AppDomain.CurrentDomain.GetAssemblies()
                             .Where(a=>a.GetName().Name.Equals(library))
                             .Select(a=>a);
            var Exported = MyAsemblies
                             .FirstOrDefault()
                             .GetExportedTypes();
            var Asignable = Exported
                             .Where (t=> !t.IsInterface && !t.IsAbstract
                             && typeof(T).IsAssignableFrom(t))
                             .Select(t=>t)
                             .AsEnumerable();
            return Asignable;
        }
    
        static public T GetInstanceOf(String library, String FullClassName)
        {
            Type Type = GetTypesFromLibrary(library)
                            .Where(t => t.FullName.Equals(FullClassName))
                            .FirstOrDefault();
            if (Type != null)
            {
                T Instance = (T)Activator.CreateInstance(Type);
                return Instance;
            }
            return default(T);
        }
    

提交回复
热议问题