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