使用 MEF 导出 属性
Export a property using MEF
让我们考虑以下场景:
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 做到这一点?
简单的回答:你需要导出你想要注入的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
属性只允许使用一次 class。
要改进解决方案,您应该使用名称来标识要注入的属性。因此,您必须扩展构造函数的原型
[ImportingConstructor]
public Details([Import("personParameter")]Person person)
和您的导出
[Export("personParameter")]
private Person personToInject { get; set; }
让我们考虑以下场景:
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 做到这一点?
简单的回答:你需要导出你想要注入的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
属性只允许使用一次 class。
要改进解决方案,您应该使用名称来标识要注入的属性。因此,您必须扩展构造函数的原型
[ImportingConstructor]
public Details([Import("personParameter")]Person person)
和您的导出
[Export("personParameter")]
private Person personToInject { get; set; }