2015-06-09 166 views
1

我现在面临一个奇怪的问题,其中一个对象可以在一个类中导入就好了。 如果我从第一个类创建另一个类的实例,则尝试在子类中导入相同的对象,导入总是失败!MEF导入对象为NULL

第一类:

public class Foo { 

    [Import] 
    private SomeExportedType foobar; 

    public Foo() { 
     foobar.Test(); // Works just fine 

     Bar bar = new Bar(); 
     bar.Test(); 
    } 
} 

二等:

public class Bar { 

    [Import] 
    private SomeExportedType foobar; 

    public void Test() { 
     foobar.Test(); // This fails because foobar is NULL 
    } 
} 

所有这一切都是伪代码,或课程,但它正确地反映了我的代码是如何构建的。 为什么子类中的导入失败?

+0

如何是“富”类实例化?如果你只是用它的构造函数创建一个类,那么导入就不会满足......我实际上讨厌属性注入的原因之一......没有准确地声明它的依赖关系。 – BenjaminPaul

+0

正如我在你的回答评论中所提到的,“Foo”由MEF实例化。 – GTHvidsten

回答

1

通过newing你的酒吧类手动你绕过MEF,因此进口没有被满足,你应该让MEF是负责newing补课的。

public class Foo { 

    [Import] 
    private SomeExportedType foobar; 

    [Import] 
    private Bar bar; 

    public Foo() { 
     foobar.Test(); // Works just 

     bar.Test(); // Should also work fine. 
    } 
} 

试着导入你的Bar类的一个实例,这样它将被MEF实例化并且导入满意。

+0

就是这样。我以前看过关于这方面的评论,但我认为只要Foo由MEF实例化,那么Bar即使在被Foo实例化时也会保持MEF连接。但显然不是。我改变了实现,以便Bar自己输出,并且Foo输入它,然后它像魅力一样工作。 – GTHvidsten

+0

@GTHvidsten这是我使用“Property Injection”时遇到的问题之一,我觉得它隐藏了类需要的依赖关系。我倾向于使用“ImportingConstructor”属性来代替它,它允许我在需要时手动创建新的类。 – BenjaminPaul