Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.NET加载项和主机之间共享资源_.net_Add In_.net Assembly_Maf_System.addin - Fatal编程技术网

在.NET加载项和主机之间共享资源

在.NET加载项和主机之间共享资源,.net,add-in,.net-assembly,maf,system.addin,.net,Add In,.net Assembly,Maf,System.addin,我开发的应用程序使用带有System.AddIn提供的.NET加载项功能的加载项。我的主机应用程序以及加载项共享一些资源,如WPF嵌入式字体和XAML图标。我希望避免将它们同时包含在主机和加载项中。有没有什么方法可以在不太复杂的情况下实现这一点 我的应用程序已经由7部分组成:主机、主机端视图、主机端适配器、契约、外接程序端适配器、外接程序端视图,最后是外接程序。我看到的问题是,当主机加载外接程序集时,外接程序不可能访问位于主机程序集中的资源 外接程序提供主机使用的服务。我希望我的主机提供外接程序

我开发的应用程序使用带有
System.AddIn
提供的.NET加载项功能的加载项。我的主机应用程序以及加载项共享一些资源,如WPF嵌入式字体和XAML图标。我希望避免将它们同时包含在主机和加载项中。有没有什么方法可以在不太复杂的情况下实现这一点

我的应用程序已经由7部分组成:主机、主机端视图、主机端适配器、契约、外接程序端适配器、外接程序端视图,最后是外接程序。我看到的问题是,当主机加载外接程序集时,外接程序不可能访问位于主机程序集中的资源

外接程序提供主机使用的服务。我希望我的主机提供外接程序使用的资源


一个可能的解决方案是引入另一个包含所有资源的程序集,主机和外接程序都可以访问该程序集。此解决方案的积极/消极方面是什么?例如,当外接程序不是协定时,它能否依赖于此程序集的存在?

您也可以通过为主机添加协定向外接程序公开主机。然后外接程序将能够请求主机可以提供的资源。查看
系统中的示例。AddIn
团队。您将在那里找到
IHostObjectContract
,它是主机的契约,在初始化期间提供给每个加载项(
IAutomationAddInContract.Initialize

使用共享程序集的另一种方法也是可能的。请记住,
System.AddIn
不仅仅是一个库。如果你不遵循他们的指导方针,你可能会失去一些功能。通常第一件丢失的事情是版本控制。通过添加共享程序集,您将面临失去版本控制的风险。如果您可以接受它,或者如果您确信共享程序集的公共类型永远不会改变,那么就使用它