MEF Импорт атрибута - PullRequest
       3

MEF Импорт атрибута

1 голос
/ 05 октября 2010

Используя MEF, я знаю, что вы можете сделать это для импорта вашего интерфейса:

class MyClass
{
    [Import(typeof(IUser))]

    private IUser m_userName;
}

Могу ли я сделать что-то подобное, но в рамках метода?Например, это ниже не компилируется:

class MyClass
{
    public void DoWork()
    {
          [Import(typeof(IUser))]
          IUser userName;

          userName.dosomething();
    }
}

Ответы [ 2 ]

1 голос
/ 03 января 2011

Используйте этот код:

IUser userName = container.GetExportedValue<IUser>();

if (userName != null)
{
    userName.dosoething();
}

Где 'container' - это экземпляр CompositionContainer:

container = new CompositionContainer(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
container.ComposeParts(this);
0 голосов
/ 05 октября 2010

Как вы уже видели, вы не можете использовать импорт таким образом.На самом деле вы никогда не сможете использовать атрибут внутри кода метода, поэтому не было бы способа использовать атрибут в методе.

Однако вы можете найти экспорты данного типа с помощью контейнера, что-то вродеэто:

IUser userName = (IUser)container.GetExports(typeof(IUser), null, null).FirstOrDefault();
...