我开发的应用程序使用System.AddIn
提供的.NET加载项功能的加载项。我的主机应用程序以及加载项共享一些资源,如WPF嵌入字体和XAML图标。我想避免将它们包含在主机和加载项中。有没有办法在没有太多复杂性的情况下实现这一目标?
我的应用程序已经包含7个部分:主机,主机端视图,主机端适配器,合同,外接程序适配器,外接程序视图以及最后的外接程序。我看到的问题是,当主机加载外接程序集时,外接程序不可能访问位于主机程序集中的资源。
加载项提供主机使用的服务。我希望我的主机提供加载项消耗的资源。
一种可能的解决方案是引入另一个包含所有资源的程序集,主机和外接程序都可以访问它们。这个解决方案的积极/消极方面是什么?比如,当一个加载项不是契约时,它可以依赖于这个程序集的存在吗?
答案 0 :(得分:0)
您也可以通过为主机添加合同来将主机公开给加载项。然后,加载项将能够请求主机可以提供的资源。查看System.AddIn
小组的Basic Automation Object Model示例。在那里,您将找到IHostObjectContract
,它是主机的合同,并在初始化期间提供给每个加载项(IAutomationAddInContract.Initialize
)。
共享程序集的另一种方法也是可行的。请记住,System.AddIn
不仅仅是一个图书馆。如果您不遵循他们的指导原则,您可能会失去一些功能。通常首先要输的是版本控制。通过添加共享程序集,您将面临失去版本控制的风险。如果您可以忍受它,或者如果您确定共享程序集的公共类型永远不会改变,那就去吧。