gpt4 book ai didi

c# - Mono.Addin 实现不检索插件

转载 作者:行者123 更新时间:2023-11-30 15:01:53 28 4
gpt4 key购买 nike

我正在使用 Mono.Addins 框架、C# 和 visual studio 2010 编写一个可扩展的应用程序。

我的应用程序结构如下:

项目 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 语句中没有产生任何插件。

p.s.: 所有.dll都编译在同一个目录下。

最佳答案

这里的问题是 IOrganizerPlugin 的扩展点是在 project1 中定义的,它既不是插件也不是插件根。解决方案是在 project2 中添加此引用:

[程序集:ImportAddinAssembly ("project1.dll")]

通过这种方式,project1 成为 App.Organizer 加载项根目录的一部分,并且 project1.dll 中的扩展点将被正确注册。

关于c# - Mono.Addin 实现不检索插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13417219/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com