Je suis nouveau à System.Action <T> et l'expression Lambda. Voici un cas que j'aimerais utiliser.Exemple d'expression Lambda avec System.Action <T> pour un cas MEF?
using System;
using System.ComponentModel.Composition;
public class MyClass {
public static CompositionContainer Container = new CompositionContainer();
private void Initialize(Action<CompositonBatch> action) {}
public MyClass() {
CompositionBatch batch = null;
inititialize(x=> {
// create catalog instances: instance1 and instance2 as example
// ...
x.AddPart(instance1);
x.AddPart(instance2);
batch = x;
});
// at this point, will be batch be none-null value will parts added?
// the following code is composing batch to the container
Container.Compose(batch);
}
}
Fondamentalement, la méthode initialize (action < l'action CompositionBatch >) est utilisé pour initialiser des composants de catalogue MEF à une instance CompositionBatch, qui ajoute toutes les parties à l'importation et à l'exportation. Après cela, le lot est composé dans le conteneur pour résoudre tous les mappages DI.
Je ne suis pas sûr si j'utilise System.Action <T> et l'expression Lambda correctement ici. X serait-il créé par Composition() CTOR à la volée dans cet exemple? Dois-je mettre quelque chose dans la méthode Initialize()? Ou devrais-je créer un délégué comme Initialize() à la place (si oui, je pense que j'ai encore besoin de le lier à une méthode)?
J'ai édité mes codes. Je ne suis pas sûr de ce que vous voulez dire par «fermeture sur le lot var». Ma compréhension est que le lot n'est pas nul après l'appel de Initialize() et qu'il contient des parties. Voulez-vous dire que j'ai besoin de définir batch comme niveau de classe var? –
J'ai eu une erreur avec action(); dans la méthode Initialize(). Ça devrait être quelque chose comme "action (nouvelle composition())"; au lieu? –
Oui, ça devrait le faire. Je vais modifier ma réponse. –