Пример лямбда-выражения с System.Action <T>для случая MEF? - PullRequest
1 голос
/ 22 января 2010

Я новичок в System.Action и лямбда-выражении. Вот один случай, который я хотел бы использовать.

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);
   }
}

Обычно метод Initialize (действие action) используется для инициализации частей каталога MEF в экземпляре CompositionBatch, который добавляет все части импорта и экспорта. После этого пакет составляется в контейнер для разрешения всех отображений DI.

Я не уверен, правильно ли я здесь использую System.Action и лямбда-выражение. Будет ли x создан Composition () CTOR на лету в этом примере? Должен ли я положить что-нибудь в метод Initialize ()? Или я должен вместо этого создать делегат как Initialize () (если я так думаю, мне все еще нужно привязать его к методу)?

1 Ответ

1 голос
/ 22 января 2010

Проблема в том, что вы никогда не вызываете свое лямбда-выражение. Для этого вам нужно изменить свой метод Initialize() следующим образом:

private void Initialize(Action<CompositonBatch> action) {action(new Composition());}

Обратите внимание, как теперь вы на самом деле вызываете метод, который передаете в функцию. Кроме того, в вашем конструкторе есть опечатка (инициализация, а не инициализация), и я не вижу, где объявлены instance1 и instance2.

Но я не уверен, что вы здесь действительно что-то получаете. Также имейте в виду, что это создаст замыкание над переменной batch.

...