C#-查找类的实例

C#-查找类的实例,c#,reflection,instance,service-locator,C#,Reflection,Instance,Service Locator,如何从另一个应用程序层找到类的实例。我必须使用我的MV(模型视图)从DAL(数据访问层)刷新一个属性。完成任务最简单的方法是什么。这可能吗?? 我的意思是: SomeClass someClass = FindInstance<SomeClass>([params]); SomeClass-SomeClass=FindInstance([params]); 谢谢您的帮助。我相信您正在尝试创建一个单例对象。这是它最简单的形式 public class SomeClass {

如何从另一个应用程序层找到类的实例。我必须使用我的MV(模型视图)从DAL(数据访问层)刷新一个属性。完成任务最简单的方法是什么。这可能吗?? 我的意思是:

SomeClass someClass = FindInstance<SomeClass>([params]);
SomeClass-SomeClass=FindInstance([params]);

谢谢您的帮助。

我相信您正在尝试创建一个单例对象。这是它最简单的形式

public class SomeClass
{
    //single instance used everywhere.
    private static SomeClass _instance;

    //private constructor so only the GetInstance() method can create an instance of this object.
    private SomeClass()
    {

    }


    //get single instance
    public static SomeClass GetInstance()
    {
        if (_instance != null) return _instance;
        return _instance = new SomeClass();
    }
}
现在要访问对象的同一实例,只需调用

SomeClass singleton = SomeClass.GetInstance();
<>如果你想使用更高级的技术,那么你可以考虑使用依赖注入之类的东西,但是这是一个不同的讨论。

编辑:

public class SomeClass
{

    private static SomeClass _instance;


    private SomeClass()
    {

    }
    public static SomeClass GetInstance()
    {
        if (_instance == null)
            throw new Exception("Call SetInstance() with a valid object");
        return _instance;
    }

    public static void SetInstance(SomeClass obj)
    {
        if (obj == null)
            throw new ArgumentNullException(nameof(obj));
        _instance = obj;
    }
}

我用以下方法解决了我的问题:

SomeClass instance = ServiceLocator.Current.GetInstance<SomeClass>();

SomeClass实例=ServiceLocator.Current.GetInstance();

您能详细说明一下为什么要这样做吗?根据您的需要,可能有比通过反射查找给定类的所有实例更好的解决方案。例如,您可以使用服务定位器模式来创建/管理特定类型的实例……可能与查看DI和IoC(类似于Autofac)重复。我不想在那里使用静态字段。我读过:System.Activator.CreateInstance(type),但它返回新实例。我需要“活动”instanceSystem.Activator.CreateInstance(类型)将完全按照它所说的那样,创建给定类型的新实例,如您所述。要在放置时查找“活动”实例,您需要将其存储在某个位置,并知道其存储位置。在这一点上使用反射并不能帮助您搜索已经存在的对象实例。如果一次只需要它的一个实例,请使用上面的singleton类,并使用一些设置当前实例的方法对其进行扩展。我已经添加了一些您可以使用的东西,但是这不再是一个单例。因此,如果我只知道类型,这是不可能的?除非我没有正确理解您的问题,否则您要做的是在应用程序内存中搜索给定特定类型的对象的实例,据我所知,这是不可能的,即使是,我怀疑它是否会非常有效;你认为我做得对吗?