3

Mono.Addinsフレームワーク、C#、およびVisualStudio2010を使用して拡張可能なアプリケーションを作成しています。

私のアプリケーションの構造は次のとおりです。

プロジェクト1:

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(プロジェクト1を参照):

    [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(プロジェクト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;
        }
    }
}

問題は次のとおりです。foreachステートメントではプラグインが生成されません。

ps:すべての.dllは同じディレクトリにコンパイルされます。

4

2 に答える 2

5

ここでの問題は、IOrganizerPlugin の拡張ポイントが、アドインでもアドイン ルートでもない project1 で定義されていることです。解決策は、この参照を project2 に追加することです。

[アセンブリ:ImportAddinAssembly ("project1.dll")]

このようにして、project1 は App.Organizer アドイン ルートの一部になり、project1.dll の拡張ポイントが正しく登録されます。

于 2012-11-16T18:41:26.340 に答える
0

理由や実装上の理由があるかどうかはわかりませんが、特殊なプラグイン インターフェイス (IOrganizerPlugin) をプラグイン ホストと同じアセンブリ内に移動するとうまくいきます。

于 2012-11-16T15:51:47.233 に答える