Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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
C# 用于factory类的.NET加载项,其中的数据可以浇铸回混凝土中_C#_Interface_Casting_Add In - Fatal编程技术网

C# 用于factory类的.NET加载项,其中的数据可以浇铸回混凝土中

C# 用于factory类的.NET加载项,其中的数据可以浇铸回混凝土中,c#,interface,casting,add-in,C#,Interface,Casting,Add In,我有一个主机应用程序,它控制各种工厂类,这些工厂类生成公共数据契约的实现。此外,所有的工厂都源于特定的工厂合同。工厂可能需要数据契约的特定实现来生成自己的对象。。。因此,主机通常可以通过factory协定中具有一个数据协定类型参数的函数传递数据。然后,工厂试图将其铸造成他们感兴趣的类型。。。如果不匹配,则忽略它。到目前为止一切正常 我想扩展它,允许用户使用.NET外接程序框架创建外接程序工厂,但我担心隔离边界。。。例如,如果一个工厂生成IData实例,那么另一个工厂是否可以将外接程序生成的对象强

我有一个主机应用程序,它控制各种工厂类,这些工厂类生成公共数据契约的实现。此外,所有的工厂都源于特定的工厂合同。工厂可能需要数据契约的特定实现来生成自己的对象。。。因此,主机通常可以通过factory协定中具有一个数据协定类型参数的函数传递数据。然后,工厂试图将其铸造成他们感兴趣的类型。。。如果不匹配,则忽略它。到目前为止一切正常

我想扩展它,允许用户使用.NET外接程序框架创建外接程序工厂,但我担心隔离边界。。。例如,如果一个工厂生成IData实例,那么另一个工厂是否可以将外接程序生成的对象强制转换为共享具体实现类型?看起来在外接程序管道中需要适配器可能会把事情搞砸

例如,在下图中,具体类DataA将在PluginA和PluginB之间共享,具体类DataB将在PluginB和PluginC之间共享


编辑:
到目前为止,我只知道有关System.Addin创建外接程序的功能。。。以及涉及直接反射的旧方法。我刚刚发现了MEF,它应该与系统核心的隔离边界无关。有MEF经验的人知道这会如何影响我的场景吗?

所以经过一些实验,我发现可以解决这些问题。由System.Addins创建的隔离屏障似乎使检索实际的具体实现变得不可能。。。MEF允许我从知道具体实现的外接程序中将发现的外接程序回溯到它们的具体类型。

因此,经过一些实验,我发现可以解决这些问题。由System.Addins创建的隔离屏障似乎使检索实际的具体实现变得不可能。。。MEF允许我将发现的外接程序从了解具体实现的外接程序回溯到它们的具体类型。

+1表示好问题,因为您有888信誉+1表示好问题,因为您有888信誉