2010-10-05 3 views
0

utilisant MEF, je sais que vous pouvez faire pour importer votre interface:MEF importation attribut

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

    private IUser m_userName; 
} 

Puis-je faire quelque chose de similaire, mais dans la méthode? Par exemple, ce qui suit ne compile pas:

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

      userName.dosomething(); 
    } 
} 

Répondre

0

Comme vous l'avez vu, vous ne pouvez pas utiliser les importations de cette manière. En fait, vous ne pouvez jamais utiliser un attribut dans le code de la méthode, donc il n'y aurait aucun moyen d'utiliser l'attribut dans une méthode.

Vous pouvez cependant trouver les exportations d'un type donné en utilisant le récipient, quelque chose comme ceci:

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

Utilisez ce code:

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

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

Où 'conteneur' est l'instance CompositionContainer:

container = new CompositionContainer(new AssemblyCatalog(Assembly.GetExecutingAssembly())); 
container.ComposeParts(this);