Комментарии 7
Такие штуки теперь решаются при помощи www.codeplex.com/MEF, будет частью .NET 4
А до этого решались через System.Addin :)
Несколько замечаний.
Activator.CreateInstance(Type) выкинет Exception если у класса нет конструктора без параметров. Для вызова конструктора с параметрами нужно применять Activator.CreateInstance(Type, object[])
Вместо того чтобы искать MethodInfo можно просто использовать Type.InvokeMember(string, BindingFlags, Binder, object[]) где BindingFlags указывает что именно мы вызываем(Get/SetProperty, InvokeMethod etc) а Binder используется в случае когда нужно принудительно выбирать вызываемый метод(когда в параметрах есть var etc)
Ну и да, про MEF уже сказали выше )
Activator.CreateInstance(Type) выкинет Exception если у класса нет конструктора без параметров. Для вызова конструктора с параметрами нужно применять Activator.CreateInstance(Type, object[])
Вместо того чтобы искать MethodInfo можно просто использовать Type.InvokeMember(string, BindingFlags, Binder, object[]) где BindingFlags указывает что именно мы вызываем(Get/SetProperty, InvokeMethod etc) а Binder используется в случае когда нужно принудительно выбирать вызываемый метод(когда в параметрах есть var etc)
Ну и да, про MEF уже сказали выше )
При таком подходе, все плагины грузятся в AppDomain хост-приложения и выгрузить их можно, только вместе со всем приложением.
В тоже время, находясь в домене хоста, плагины могут «напрямую» общаться с элементами хоста.
Если плагин загружать в другой AppDomain, необходимо организовывать cross-domain коммуникации.
В тоже время, находясь в домене хоста, плагины могут «напрямую» общаться с элементами хоста.
Если плагин загружать в другой AppDomain, необходимо организовывать cross-domain коммуникации.
Может в блог .Net перекините?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Позднее связывание в C#