在EXE中使用DLL

时间:2011-09-20 01:57:05

标签: c# dll consuming

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

通常,

  1. 我在我的解决方案中添加了DLL并在我的Exe中引用了DLL
  2. 创建类的对象(在我的DLL中)
  3. 从刚刚创建的对象开始调用类中的方法/函数。
  4. 但最终决定,我们应该使用Reflection而不是我们正在做的事情。原因是松耦合。可以更改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时,以及如何在不同的DLL中的A类和B类创建相同的对象时,如何创建A类的对象。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

如果您希望在不重新编译甚至重新部署的情况下提供扩展或替换功能的能力,那么您基本上在基于松散耦合的接口上查看插件类型体系结构。

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

示例:

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

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

点击此链接:

http://mef.codeplex.com/

从该链接(重新提出您的问题):

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

希望有所帮助。