使用MEF导出一个属性

3

让我们考虑以下情况:

class Master
{
    private Person selectedPerson;

    public Person SelectedPerson
    {
        get
        {
            return selectedPerson;
        }
        set
        {
            selectedPerson = value;

        }
    }

}

[Export(typeof(Details))]
class Details
{
    [ImportingConstructor]
    public Details(Person person)
    {

    }
}

我需要使用SelectedPerson作为Details实例的参数进行初始化。因此,我需要将特定的Person实例注入到Details构造函数中。
使用MEF如何做到这一点?

我不相信这可以用MEF实现,你应该创建一个能够加载个人信息的服务,然后将该服务导入到详情类中。然后,您可以使用来自个人对象的可用信息,从服务中加载正确的详细信息。例如:var contactDetail = contactDetailService.Load(person.Id); - Louis Lewis
1个回答

2
简单的回答:您需要导出要注入的Person。以下是可能的控制台应用程序的基本示例:
public class Program
{
    [Export(typeof(Person))]
    private Person personToInject { get; set; }

    public static void Main(string[] args)
    {
        new Program().Run();
    }

    private void Run()
    {
        var catalog = new DirectoryCatalog(".");
        var container = new CompositionContainer(catalog);

        //Create the person to inject before composing
        personToInject = new Person();        

        container.ComposeParts(this);
    }
}

注意,ImportingConstructor属性只允许在一个类中使用一次。
为了改进解决方案,您应该使用名称来标识要注入的属性。因此,您必须扩展构造函数的原型。
[ImportingConstructor]
public Details([Import("personParameter")]Person person)

和您的导出

[Export("personParameter")]
private Person personToInject { get; set; }

谢谢。那正是我在寻找的。 - Sabyasachi Mukherjee
很高兴能够帮助 - 祝你编码愉快 :-) - Fruchtzwerg
依赖注入框架如何知道要使用哪个类的实例进行依赖注入?是否使用所有实例?这里的机制是什么或有关此的文档? - AffluentOwl
使用Export属性标记的实例被使用。 - Fruchtzwerg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接