Предположим, у меня есть класс 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
так что, когда я создаю второй плагин, работающий в отдельном потоке, я получаю потокобезопасное соединение с реальным объектом для всех плагинов?