创建插件应用程序的方法

时间:2011-08-04 10:57:48

标签: c# .net winforms

我有一个.NET WinForm应用程序。我希望当我的应用程序运行时,它会检测到一个DLL。如果此DLL存在,我的应用程序将加载并像内置DLL一样使用它。

请帮我举几个例子。感谢。

4 个答案:

答案 0 :(得分:4)

在System.ComponentModel.Composition命名空间中阅读MEF - Microsoft Extensibility Framework。 .NET 4.0核心功能的一部分。

答案 1 :(得分:3)

您还可以使用System.Addin命名空间使用Microsoft加载项框架(MAF)。

详细了解http://msdn.microsoft.com/en-us/library/bb384200.aspx

答案 2 :(得分:1)

如果它只是一个DLL,添加对它的引用并使用它捕获任何异常。 如果可能有许多(可能是第三方)DLL,请使用Assembly.Load*方法之一,然后您可以从Assembly对象枚举类。

查看我的BuilderPro项目中的一些示例,特别是Extensions.csExtension.cs

答案 3 :(得分:1)

如果您正在寻找使用反射的简单方法,您可以采用从配置文件中加载类型信息的方法:

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");
    }
}

希望有所帮助,

约翰