2012-11-16 30 views
3

我正在寫使用Mono.Addins框架,C#和Visual Studio 2010Mono.Addin實現不檢索加載項

我的應用程序的結構,可伸展的應用程序如下:

PROJECT1:

namespace Plugins 
{ 
    [TypeExtensionPoint] 
    public interface IPlugin<InitParamsType> 
    { 
     void Refresh(); 

     string PlugInName { get; } 

     void Initialize(InitParamsType parameters); 
    } 

    [TypeExtensionPoint] 
    public interface IOrganizerPlugin : IPlugin<string> 
    { 
     bool AllowsToEditBrandCode { get; } 

     UserControl GetUI(); 
    } 

    public interface IPluginHost<PluginSpecalizedType> 
    { 
     void EmbedPlugin(PluginSpecalizedType plugin); 
    } 
} 

項目2(參考文獻PROJECT1):

[assembly: AddinRoot("App.Organizer", "1.0")] 
namespace App.Organizer 
{ 
    public partial class frm_Supplier_Managed : Form, IPluginHost<IOrganizerPlugin> 
     { 

     public frm_Supplier_Managed() 
     { 
       AddinManager.Initialize(); 
       AddinManager.Registry.Update(null); 

       foreach (IOrganizerPlugin Addin in AddinManager.GetExtensionObjects(typeof(IOrganizerPlugin))) 
       { 
        EmbedPlugin(Addin); 
       } 
     } 


     public void EmbedPlugin(IOrganizerPlugin plugin) 
     { 
      //embedding UI and so on.. 
     } 
     } 
} 

項目3在foreach語句無插件產生 :(引用項目1項):

[assembly: Addin("App.OrganizerPro", "1.0")] 
[assembly: AddinDependency("App.Organizer", "1.0")] 

namespace App 
{ 
    [Extension] 
    public class MainPlugIn : IOrganizerPlugin 
    { 
     public void Refresh() 
     { 
      return; 
     } 

     public string PlugInName 
     { 
      get { return ""; } 
     } 

     public void Initialize(string supplierCode) 
     { 
     } 

     public UserControl Interface 
     { 
      get { return null; } 
     } 

     public bool AllowsToEditBrandCode 
     { 
      get { return true; } 
     } 

     public UserControl GetUI() 
     { 
      return null; 
     } 
    } 
} 

問題。

p.s .:所有.dll編譯在同一個目錄下。

回答

5

這裏的問題是IOrganizerPlugin的擴展點在project1中定義,它不是插件或插件根。解決的辦法是在項目2添加此引用:

[組件:ImportAddinAssembly(「project1.dll」)]

這樣PROJECT1成爲App.Organizer的一部分外接根,和擴展點在project1.dll中將正確註冊。

+0

我現在不能嘗試,但今天下午我會做。但我也嘗試在Project1中放置 [assembly:AddinRoot(「App.Organizer」,「1.0」)] ,但它不起作用。這與您的解決方案是否完全相同? –

+0

好吧,我已經嘗試過,它的工作原理,謝謝! –

0

不知道爲什麼或者有一些實現的原因,但是在插件主機爲我工作的同一個程序集內移動專用插件接口(IOrganizerPlugin)。