c#反射获取单例对象的实例
Posted lonelyrains
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#反射获取单例对象的实例相关的知识,希望对你有一定的参考价值。
object obj = null;
if (classItem.BaseType.Name == "Singleton`1")
obj = classItem.BaseType.GetProperty("Instance").GetValue(null);
else
obj = Activator.CreateInstance(classItem);
反射创建实例,最常用的是在插件加载时。如果这个类是单例模式的,再使用CreateInstance,不会直接调用Instance的那个实例,而是又创建了一个。会出现明明应该单例调用的地方,数据不一致的情况。
此时,就需要了解怎么反射调用Instance实例。
假设单例模板如下:
// 本单例模板代码来自https://www.cnblogs.com/zhouzl/archive/2019/04/11/10687909.html
public abstract class Singleton<T> where T : class
// 这里采用实现5的方案,实际可采用上述任意一种方案
class Nested
// 创建模板类实例,参数2设为true表示支持私有构造函数
internal static readonly T instance = Activator.CreateInstance(typeof(T), true) as T;
private static T instance = null;
public static T Instance get return Nested.instance;
以上是关于c#反射获取单例对象的实例的主要内容,如果未能解决你的问题,请参考以下文章