Quelle est la bonne façon de faire cela? Disons que nous avons une bibliothèque tierce dans notre projet et que nous devons fournir un accès à certains contrôles qui sont scellés. De nouveaux widgets seront créés et ajoutés à l'application en utilisant MEF et ils devraient être capables d'importer certains contrôles depuis l'application principale. Alors, comment exporter ces contrôles correctement?Façon correcte d'exposer le contrôle visuel de tiers dans MEF
Répondre
Si vous ne pouvez pas modifier la classe d'origine (par exemple ThirdPartyComponent
), vous pouvez faire l'exportation via une propriété sur une autre classe (par exemple ThirdPartyComponentExporter
):
public class ThirdPartyComponentExporter
{
[Export(typeof(ThirdPartyComponent))]
public ThirdPartyComponent Foo
{
get
{
return new ThirdPartyComponent();
}
}
}
Pour les contrôles visuels, vous pouvez avoir à utiliser CreationPolicy.NonShared
pour empêcher MEF de réutiliser la même instance dans différents emplacements.
Qu'en est-il de l'encapsulation des contrôles tiers dans les classes "export", puis accédez à ce contrôle via l'encapsuleur?
C'est en fait le je le fais en ce moment. Mais j'ai perdu le Blendability depuis que je ne peux plus ajouter le contrôle exporté dans Xaml donc cela ne semble pas la bonne manière de le faire. J'ai besoin de partager une instance unique du contrôle partout maintenant même là où il est déjà accessible (par exemple dans la page principale) Je dois utiliser le mécanisme d'importation et l'ajouter à un conteneur dans le code derrière. – incognito
Est partagé la stratégie de création par défaut? J'ai essayé quelque chose de similaire et ajouté le contrôle que je voulais exporter à l'intérieur d'un contrôle utilisateur et l'exposer via la propriété. Puis j'ai ajouté ce contrôle de l'utilisateur à la page principale (puisque je voulais voir le contrôle exporté dans Visual Designer et que c'était la seule façon de le faire). Et il semblait que deux instances différentes de contrôle exportable étaient en train d'être créées, une par le MEF et une autre par un autre parce que j'avais ajouté un contrôle d'utilisateur contenant l'exportable à la page. – incognito
Oui partagé est la stratégie de création par défaut. – blindmeis
@Incognito: Par défaut, MEF va essayer de réutiliser les instances qu'il crée lui-même. Mais il ne réutilisera pas les instances que * vous * avez créées, comme vous le décrivez ici. Il ne sait pas à propos de ces instances. –