c# - 如何通过反射从单例类中获取实例

标签 c# reflection

考虑这段代码:

public class Test
{
    private static readonly Lazy<Test> Lazy = new Lazy<Test>(() => new Test());

    private Test()
    {
        Console.WriteLine("Calling constractor");
    }

    public static Test Instance
    {
        get { return Lazy.Value; }
    }

    public void Something()
    {
    }
}

当我想从上面的类创建实例时,我们应该将构造函数的访问修饰符更改为 public,为了从此类获取实例,我编写了以下代码:

  Type type = typeof(Test);
        IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().ToList()
                                           .SelectMany(s => s.GetTypes())
                                           .Where(type.IsAssignableFrom);
        Type strtegy = types.FirstOrDefault(x => x.IsClass);
        for (int i = 0; i < 10; i++)
        {
            Activator.CreateInstance(strtegy);
        }

如果使用这段代码,每次调用Activator.CreateInstance 构造函数都应该调用。所以我们有很多类的实例。

如何通过反射从单例类中获取实例?

最佳答案

要创建实例,请执行与在代码中执行的操作相同的操作——获取 Instance 的值:

var singleton = typeof(Test).GetProperty("Instance").GetValue(null);

关于c# - 如何通过反射从单例类中获取实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828039/

相关文章:

c# - 如何使用 C# 中的内置网页浏览器保存完整的网页

c# - ArrayList 有什么不好?

c# - 通过 C# .NET Framework 托管数据工厂将数据从 Blob 复制到 Azure SQL 时忽略坏行

C# 反射 GetType() 异常

java - Java 反射中的 Field 类可以作用于任何对象吗?

java - 无法访问Java中字段的注释

Java 代理示例正在创建堆栈溢出?

c# - 是否可以对具有显式实现的接口(interface)属性的类进行 json 序列化?

c# - 使用 C# 将 infopath 表单下载为 XML 文件

java - 反射的 NoSuchMethodException 问题