Bien que j'ai déjà fait un article sur le MEF, je voudrais apporter une explication sur une fonctionnalité fort intéressante à mon gout: "importingconstructor". Le but de cette option est de partager un objet du conteneur avec l'ensemble de ses plugins. Dans mon projet actuel, il me permet de donner accès à des fonctionnalités de la Kinect à chaque composant chargé par MEF.
Dans le conteneur, lors de l'instanciation du MEF:
string[] directories = Directory.GetDirectories("Plugins");On remarque que l'importingconstructor ne nécessite qu'une seule ligne (l'avant dernière ligne), que celle-ci ne comporte que la variable _myKinect et le nom sous lequel on référence cette variable: "myKinect".
AggregateCatalog containerMaster = new AggregateCatalog();
foreach (string directory in directories)
{
containerMaster.Catalogs.Add(new DirectoryCatalog(directory));
}
CompositionContainer container = new CompositionContainer(containerMaster);
container.ComposeExportedValue("myKinect", _myKinect);
container.ComposeParts(this);
Une fois dans un composant, il faut récupérer cette variable. Cela se fait dans le constructeur comme suit:
[ImportingConstructor]J'espère que cette explication vous sera utile. Je fini néanmoins par vous prévenir sur le fait que cette technique peut posséder un risque, vu que vous donner accès à des ressources sans connaître le composant qui va les exploiter.
public MainWindow([Import("myKinect")] KinectSensor myKinect)
{
_kinect = myKinect;
}
Comme on dit chez moi: Paix sur ta couche!