我开发的应用程序使用System.AddIn
提供的. net插件功能。我的主机应用程序以及外接程序共享一些资源,如WPF嵌入字体和XAML图标。我希望避免在主机和外接程序中包含它们。有没有办法在不太复杂的情况下实现这一点?
我的应用程序已经由7部分组成:主机,主机侧视图,主机侧适配器,契约,外接程序侧适配器,外接程序侧视图,最后是外接程序。我看到的问题是,当主机加载外接程序程序集时,外接程序不可能访问位于主机程序集中的资源。
外接程序提供主机使用的服务。我希望我的主机提供外接程序消耗的资源。
一个可能的解决方案是引入另一个包含所有资源的程序集,该程序集可由主机和外接程序访问。这个解决方案的积极和消极方面是什么?比如,当外接程序不是契约时,它能否依赖于该程序集的存在?
您还可以通过为主机添加契约将主机公开给外接程序。然后,外接程序将能够请求主机可以提供的资源。看看System.AddIn
团队的基本自动化对象模型示例。在这里,您将找到IHostObjectContract
,它是主机的契约,并在初始化期间提供给每个加载项(IAutomationAddInContract.Initialize
)。
共享程序集的另一种方法也是可能的。请记住,System.AddIn
不仅仅是一个库。如果你不遵循他们的指导方针,你可能会失去一些功能。通常首先失去的是版本控制。通过添加共享程序集,您将冒失去版本控制的风险。如果您可以接受它,或者如果您确定共享程序集的公共类型永远不会更改,那么就使用它。