C# 是否从DLL/程序集获取实例?

C# 是否从DLL/程序集获取实例?,c#,dll,C#,Dll,[我已经发布了一些非常类似的内容,但问题不好,以下是我真正想知道的] 我得到了以下生成DLL的代码: public class MyObject : DependencyObject { } public class Timer : DependencyObject { } public class AnotherClass { } public class Test { MyObject q1 = new MyObject(); MyObject q2 = new My

[我已经发布了一些非常类似的内容,但问题不好,以下是我真正想知道的]

我得到了以下生成DLL的代码:

public class MyObject : DependencyObject
{
}


public class Timer : DependencyObject
{
}

public class AnotherClass
{
}

public class Test
{
    MyObject q1 = new MyObject();
    MyObject q2 = new MyObject();
    MyObject q3 = new MyObject();
    MyObject q4 = new MyObject();

    Timer t1 = new Timer();
    Timer t2 = new Timer();
    Timer t3 = new Timer();

    AnotherClass a1 = new AnotherClass();
    AnotherClass a2 = new AnotherClass();
    AnotherClass a3 = new AnotherClass();
    }
}
然后我想从我的DLL文件中提取实例。以下是我目前得到的信息:

var library = Assembly.LoadFrom(libraryPath);
但是,我不知道如何提取我的10个实例(4个myobject、3个timer和3个其他类)。我唯一能得到的是4个类(MyObject、Timer、AnotherClass和Test)及其代码:

IEnumerable<Type> types = library.GetTypes();
IEnumerable types=library.GetTypes();
但我认为这不是我得到10个实例的方式


(注:我甚至不确定这10个实例是否包含在我的DLL文件中…

您需要实例化
测试的一个实例。除非你这么做,否则这些实例不会存在

现在,我怀疑您真正想要做的是拥有一个单例(一个因许多原因而不受欢迎的设计模式)。但是,如果您需要,您可以这样做:

public class Test
{
    private static Test instance_ = new Test();

    MyObject q1 = new MyObject();
    MyObject q2 = new MyObject();
    MyObject q3 = new MyObject();
    MyObject q4 = new MyObject();

    Timer t1 = new Timer();
    Timer t2 = new Timer();
    Timer t3 = new Timer();

    AnotherClass a1 = new AnotherClass();
    AnotherClass a2 = new AnotherClass();
    AnotherClass a3 = new AnotherClass();

    public Test Instance { get { return instance_; } }
}
现在,假设您公开这些成员,您可以通过以下方式获得:

Test.Instance.a1;  // etc...

现在,正如我所说的,单身通常不是一个好主意。最好从依赖模块实例化您自己的测试实例并使用它。

您需要实例化
测试的实例。除非你这么做,否则这些实例不会存在

现在,我怀疑您真正想要做的是拥有一个单例(一个因许多原因而不受欢迎的设计模式)。但是,如果您需要,您可以这样做:

public class Test
{
    private static Test instance_ = new Test();

    MyObject q1 = new MyObject();
    MyObject q2 = new MyObject();
    MyObject q3 = new MyObject();
    MyObject q4 = new MyObject();

    Timer t1 = new Timer();
    Timer t2 = new Timer();
    Timer t3 = new Timer();

    AnotherClass a1 = new AnotherClass();
    AnotherClass a2 = new AnotherClass();
    AnotherClass a3 = new AnotherClass();

    public Test Instance { get { return instance_; } }
}
现在,假设您公开这些成员,您可以通过以下方式获得:

Test.Instance.a1;  // etc...

现在,正如我所说的,单身通常不是一个好主意。最好从依赖模块实例化您自己的测试实例并使用它。

您无法轻松获得给定类型的所有实例。除了一些相当核心的调试API(想想:SOS)之外,这根本不存在。如果需要,您应该考虑其他一些可管理的方法来跟踪您的实例(理想情况下不让它们保持活动状态,因此
WeakReference
)。

您无法轻松获得给定类型的所有实例。除了一些相当核心的调试API(想想:SOS)之外,这根本不存在。如果需要,您应该考虑其他一些可管理的方法来跟踪您的实例(理想情况下不保持它们的活动状态,因此
WeakReference
)。

您能不能在消费项目中引用dll,然后像使用任何其他类库一样使用它,我可以动态加载特定文件夹中的任何dll:/您这样做的具体原因是什么,而不是将dll作为项目的一部分?这里的“10个实例”实际上是“每个
测试的实例”,其中可能有任意数量(很可能是:零),我知道我可以创建一个没有任何子对象的
Test
实例(即
q1
等都是
null
)。这里有很多假设,根本站不住脚。“我甚至不确定这10个实例是否包含在我的DLL文件中。”“从概念上讲,实例只有在记忆中才有意义;该文件仅包含IL元数据。您是否可以在消费项目中引用dll,然后像使用任何其他类库一样使用它?不,我可以,因为我将动态加载特定文件夹中的任何dll:/您这样做的具体原因是什么,而不是将dll作为项目的一部分?“10个实例”这里实际上是“每个
Test
实例,其中可能有任何数字(很可能是零),我知道我可以创建一个
Test
实例,而不需要任何子对象(即
q1
等都
null
)。这里有很多假设根本站不住脚。”我甚至不确定这10个实例是否包含在我的DLL文件中“实例,从概念上讲,仅在内存中有意义;该文件仅包含IL元数据。+1有一些好的框架用于管理外部对象ie MEF>+1有一些好的框架用于管理外部对象ie MEF>