DrH*_*use 6 .net c# mono plugins add-in
我正在用C#编写一个Addin框架,我想知道如何在不需要重新启动应用程序的情况下使Addin无法加载.
我听说过AppDomains但这些有用吗?Addin可以添加可扩展性类,并且可以通过接口在主AppDomain中调用,并且仍然可以卸载并调用清理代码,导致这些类被删除而该程序集不在主AppDomain中吗?
或者是否有其他方法可以实现无法加载的插件,但是除了AppDomain之外的IIRC,你无法卸载组件.
如果可能的话,我还希望插件引擎与Mono兼容,所以如果可以的话,任何答案都会尝试与Mono保持兼容.
你可能想看一下Mono.Addins.有一些很好的样本看这里,这里有一些细节:.
以下代码是加载项主机应用程序的基本示例.此应用程序运行一组可由加载项实现的命令:
using System;
using Mono.Addins;
[assembly:AddinRoot ("HelloWorld", "1.0")]
class MainClass
{
public static void Main ()
{
AddinManager.Initialize ();
AddinManager.Registry.Update ();
foreach (ICommand cmd in AddinManager.GetExtensionObjects<ICommand> ())
cmd.Run ();
}
}
Run Code Online (Sandbox Code Playgroud)
上面例子的扩展点可以这样声明:
using Mono.Addins;
[TypeExtensionPoint]
public interface ICommand
{
void Run ();
}
Run Code Online (Sandbox Code Playgroud)
扩展上述扩展点的加载项如下所示:
using System;
using Mono.Addins;
[assembly:Addin]
[assembly:AddinDependency ("HelloWorld", "1.0")]
[Extension]
public class HelloCommand: ICommand
{
public void Run ()
{
Console.WriteLine ("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5063 次 |
最近记录: |