0

上周我与朋友讨论了使用 DLL(.net DLL) 中的类。我有一个 .net DLL,我需要在我的 Exe 中使用它。

一般,

  1. 我在我的解决方案中添加 DLL 并在我的 Exe 中引用 DLL
  2. 创建类的对象(在我的 DLL 中)
  3. 从刚刚创建的对象开始调用类中的方法/函数。

但最终决定,我们应该使用反射而不是我们正在做的方式。原因是松耦合。可以更改 DLL 中的功能并对其进行编译。在这种情况下,您不需要编译客户端代码。

我有一个关于这个背景的问题。

假设,我有一个非常简单的应用程序(比如控制台应用程序),并且我有两个类都被编写来完成不同的工作。

class Program
{
    static void Main()
    {

        //How do you create a object of the class A. 

    }
}


class A
{

    string A = "I am from A";
    public B b; 
    public A
    {
        b = new B();

    }
}

class B
{

    string B = "I am from B";
    public B
    {

    }
    public void Print()
    {
        Console.WriteLine(B);
    }
}      

当所有三个类都相同的exe时如何创建A类的对象,当A类和B类在不同的DLL中时如何创建相同的对象。

问题第二部分的一个答案是使用接口和使用反射。

反射是否真的需要,或者它是一种编程标准。

创建类的对象的最佳实践是什么。

4

1 回答 1

1

接口提供了一种松耦合的方法。

如果您想在不重新编译甚至重新部署的情况下提供事后扩展或替换功能的能力,那么您基本上是在寻找基于松散耦合接口之上的插件类型架构。

您可以使用反射来迭代并创建对象的实例,但另一个选项是配置/注册。例如,在您的配置文件(或注册表等)中,您可以指向实现该接口的文件和类,并使用 System.Activator 在运行时创建它。

例子:

http://msdn.microsoft.com/en-us/library/ms972962.aspx

另一个更强大的选择是 MEF。它是由 .net 框架团队开发的插件框架。

看看这个链接:

http://mef.codeplex.com/

从那个链接(加强你的问题):

“应用程序需求经常变化,软件也在不断发展。因此,此类应用程序通常变得单一,难以添加新功能。托管可扩展性框架 (MEF) 是 .NET Framework 4 和 Silverlight 4 中的一个新库,可解决此问题通过简化可扩展应用程序和组件的设计来解决问题。”

希望有帮助。

于 2011-09-20T02:15:25.423 回答