插件如何获得对主机的引用?

How does an addin get a reference to the host?

我正在试验 System.Addin MAF 功能。我有一个主机,它在新的应用程序域中创建新插件的实例并启动它 运行。

我想在主机上使用插件调用方法来备份数据。很清楚如何让宿主创建插件的实例(AddinToken.Activate),但是插件如何获取对宿主的引用?

我曾尝试通过 Initialise 方法将主机的副本传递给插件,但是因为它需要可序列化,所以这会造成困难。我必须将某些属性标记为 NonSerialized,这意味着当插件调用其上的方法时它们为空。感觉虽然写了View & Adapter支持Addin->Host contract,但是被这种方法绕过了?

您没有将主机的副本传递给插件。相反,您需要定义一个传递给插件的接口,并在主机端提供一个实现。

例如,您可以定义 AddIn 必须实现的 Initialize 方法。您可以为该方法指定代表主机提供的服务的参数。我使用它的一种情况是为插件提供一个日志记录接口。初始化方法定义为:

void Initialize(ILogger logger);

当主机在 AddIn 上调用初始化时,它会传递 ILogger 的实现,然后 Addin 可以保留该实现并在需要记录时调用。