Использование DLL в EXE - PullRequest
       21

Использование DLL в EXE

0 голосов
/ 20 сентября 2011

На прошлой неделе у меня была дискуссия с друзьями о том, как использовать классы в DLL (.net DLL). У меня есть .NET DLL, которая мне нужна, потребляйте ее в моем Exe.

Обычно

  1. Я добавляю DLL в свое решение и ссылаюсь на DLL в моем Exe
  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);
    }
}      

Как создать объект класса A, когда все три класса одинаковы, и как создать один и тот же объект, когда класс A и класс B находятся в разных библиотеках DLL.

один ответ для второй части вопроса - использовать интерфейс и использовать отражение.

Является ли отражение действительно необходимым, или это своего рода стандарт программирования.

Какая лучшая практика для создания объекта класса.

1 Ответ

1 голос
/ 20 сентября 2011

Интерфейсы обеспечивают возможность слабой связи.

Если вы хотите предоставить возможность расширять или заменять функциональность после факта без перекомпиляции или даже повторного развертывания, то вы в основном смотрите на плагинв архитектуре типов поверх интерфейсной слабой связи.

Вы можете использовать отражение для итерации и создания экземпляра объекта, но другой вариант - конфигурация / регистрация.Например, в вашем конфигурационном файле (или реестре и т. Д.) Вы можете указать файл и класс, который реализует этот интерфейс, и использовать System.Activator для его создания во время выполнения.

Пример:

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

Еще один более надежный вариант - MEF.Это плагин фреймворка, разработанный командой разработчиков .net Framework.

Проверьте эту ссылку:

http://mef.codeplex.com/

По этой ссылке (усиливая ваш вопрос):

"Требования к приложениям часто меняются, а программное обеспечение постоянно развивается. В результате такие приложения часто становятся монолитными, что затрудняет добавление новых функций. Среда Managed Extensibility Framework (MEF) - это новая библиотека в .NET Framework 4 иSilverlight 4 решает эту проблему, упрощая разработку расширяемых приложений и компонентов. "

Надеюсь, это поможет.

...