zoukankan      html  css  js  c++  java
  • C#动态创建单例类的对象

    单例类

    public class SnappingClass : ISnappingEnvironment, IExtension
        {
           
            //
            private static readonly SnappingClass instance = null;
            static SnappingClass()
            {
                instance = new SnappingClass();            
            }
    
            private SnappingClass()
            {
                
            }
    
            public static SnappingClass Instance
            {
                get
                {
                    return instance;
                }
            }


    动态创建:

    void IExtensionManagerAdmin.StartupExtensions(string componentCategory, string jitCategory, ref object initializationData)
            {
                var typeInfos = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IExtension)))).ToArray();
                foreach (var typeInfo in typeInfos)
                {
                    //Console.WriteLine(typeInfo.FullName);
                    //IExtension pExtension = typeInfo.Assembly.CreateInstance(v.FullName) as IExtension;
    
                    //MethodInfo methodInfo = typeInfo.GetMethod("Instance", BindingFlags.NonPublic | BindingFlags.Static, null, new Type[] { }, null);
                    //IExtension pExtension = methodInfo.Invoke(null, null) as IExtension;
                    //
                    PropertyInfo propertyInfo = typeInfo.GetProperty("Instance", BindingFlags.Public |  BindingFlags.NonPublic | BindingFlags.Static);
                    //
                    //PropertyInfo[] propertyInfos = typeInfo.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
                    //foreach (PropertyInfo propertyInfo in propertyInfos)
                    //{
                    //    Console.WriteLine(propertyInfo.Name);
                    //}
                    IExtension pExtension = propertyInfo.GetValue(null, null) as IExtension;
                    //
                    pExtension.Startup(ref initializationData);
                    this.pExtensionList.Add(new KeyValuePair<string, IExtension>(pExtension.Name, pExtension));
                }
            }

    -----------------------------------------------------------------------------------------

  • 相关阅读:
    多态性与转型
    安装tensorflow
    MySQL基础补缺
    各种排序算法理解
    Ubuntu命令行变成白色
    开机显示grub命令
    E: 无法获得锁 /var/lib/dpkg/lock-frontend
    类与方法
    Java语言浅谈
    二进制数的有效讨论
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/11572024.html
Copyright © 2011-2022 走看看