Способ создания плагина приложения - PullRequest
2 голосов
/ 04 августа 2011

У меня есть приложение .NET WinForm. Я хочу, чтобы когда мое приложение запускалось, оно обнаруживало DLL. Если эта DLL существует, мое приложение загрузится и будет использовать ее как встроенную DLL.

Пожалуйста, помогите мне несколько примеров. Спасибо.

Ответы [ 4 ]

4 голосов
/ 04 августа 2011

Ознакомьтесь с MEF - Microsoft Extensibility Framework, в пространстве имен System.ComponentModel.Composition. Часть основной функциональности .NET 4.0.

3 голосов
/ 04 августа 2011

Также можно использовать Microsoft Add-In Framework (MAF), используя пространство имен System.Addin.

Подробнее о http://msdn.microsoft.com/en-us/library/bb384200.aspx

1 голос
/ 04 августа 2011

Если вы ищете что-то простое с помощью отражения, вы можете воспользоваться подходом загрузки информации о типе из файла конфигурации:

public interface IMyPlugin
{
    void DoSomethingPlugInIsh();
}

class Program
{
    static void Main(string[] args)
    {
        IMyPlugin plugin1 = CreateFromConfig<IMyPlugin>("PluginType");
        plugin1.DoSomethingPlugInIsh();

        // etc...
    }

    static T CreateFromConfig<T>(string typeSettingName)
        where T : class
    {
        string typeName = ConfigurationManager.AppSettings[typeSettingName];
        if (string.IsNullOrEmpty(typeName))
            return null;

        var type = Type.GetType(typeName);
        return (T)Activator.CreateInstance(type);
    }

}

Файл конфигурации будет содержать информацию о типе, который вы собираетесь создать, чтобы люди могли изменить его на свой собственный плагин:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appSettings>
    <add key="PluginType" value="TestPlugin.MyClass, TestPlugin, Version=1.0.0.0, Culture=neutral" />
  </appSettings>
</configuration>

И класс будет ссылаться на ваш интерфейс и реализовывать его:

public class MyClass : IMyPlugin
{
    public void DoSomethingPlugInIsh()
    {
        Console.WriteLine("Hello there");
    }
}

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

John

1 голос
/ 04 августа 2011

Если это всего лишь одна DLL, добавьте ссылку на нее и перехватите все исключения, используя ее.Если может быть много (возможно, сторонних) DLL, используйте один из методов Assembly.Load*, и затем вы можете перечислять классы из объекта Assembly.

См. Некоторые примеры в моем проекте BuilderPro в частности Extensions.cs и Extension.cs .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...