2010-10-05 79 views
0

使用MEF,我知道你可以做到这一点,以导入接口:MEF导入属性

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

    private IUser m_userName; 
} 

我可以做类似的,但在方法中的东西吗?例如,下面的代码不能编译:

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

      userName.dosomething(); 
    } 
} 

回答

0

正如你所看到的,你不能以这种方式使用Imports。实际上,你不能在方法代码中使用属性,所以在方法中不能使用属性。

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

使用此代码:

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

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

在哪里“集装箱”是CompositionContainer中的实例:

但是,您可以通过使用容器,这样的事情找到一个给定类型的出口

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