gpt4 book ai didi

C# MEF : Threadsafe Export

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:19 25 4
gpt4 key购买 nike

假设我有一个 CarSystem 类,其中有一组 CarParts 对象。现在我想给系统写一个立体声插件,我希望所有插件的格式是:

public interface ICarPluginMetaData
{
string Name {get;}
string Description {get;}
int Status {get; set;}
}

public interface ICarPlugin
{
void int setStatus(int newStatus);
}

[Export(typeof(ICarPlugin))]
[ExportMetaData("Name", "Stereo")]
[ExportMetaData("Description","Plays music")]
[ExportMetaData("Status", 0)]
public class StereoPlugin : ICarPlugin
{
[ICarPluginImport("FrontSpeakers")]
public CarPart myFrontSpeakersPointer;

[ICarPluginImport("RearSpeakers")]
public CarPart myRearSpeakersPointer;

[ICarPluginImport("subwoofer")]
public CarPart mysubwooferPointer;

[Export]
public void setStatus(int newStatus)
{
Status = newStatus;
}
}

现在在我的 CarSystem 类中,我定义了导出,但是默认行为是创建 1 个静态对象,并将它交给所有导入它的人;我怎样才能做到以下几点:

[ExportAsThreadsafe]
public CarPart FrontSpeakers

[ExportAsThreadsafe]
public CarPart RearSpeakers

[ExportAsThreadsafe]
public CarPart Subwoofer

[ExportAsThreadsafe]
public CarPart DashLights

这样当我创建第二个插件时,在单独的线程上运行时,我可以获得到所有插件的实际对象的线程安全连接?

最佳答案

在 MEF 中提供线程安全的一种方法是在每个线程中执行单独的独立 MEF 组合。然后,在该组合中构建的所有内容对于该线程都是本地的。任何跨线程访问都在您的控制之下,您可以使用正常的线程安全技术。

我不清楚您是否要加载多个立体声插件并让它们可用于/绑定(bind)到一个全局 CarSystem,或者您是否只是在谈论在不同线程中拥有多个 CarSystem,彼此独立。您可以通过 MEF 在线程内使用特定的立体声插件组合 CarSystem 来完成后者。

关于C# MEF : Threadsafe Export,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com