我的问题标题听起来有点难 - 对不起。我是MEF的新成员:-)。MEF:我如何导入一个具有构造函数的类,该构造函数标有ImportingConstructorFlag
我的情景:
public class MainClass
{
[ImportMany(typeof(ITest))]
private List<ITest> Tests { get; set; }
public MainClass()
{
Init();
}
private void Init()
{
DirectoryCatalog catalog = new DirectoryCatalog(@"./");
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
[Export("BirthdayJob")]
[Export(typeof(ITest))]
public partial class BirthdayTest : ITest
{
[ImportingConstructor]
public BirthdayUserControl(IParameter parameter)
{
InitializeComponent();
this.Parameter = jobParameter;
}
public IParameter Parameter { get; set; }
}
[Export(typeof(IParameter))]
[Export("BirthdayParameter")]
public class BirthdayJobParameter : IParameter
{
public override string ToString()
{
return "Birthday Remember";
}
}
public interface IParameter : IMefInterface
{
}
public interface IMefInterface
{
}
在测试的泛型列表,我应该有相关的IParameter对象的所有可能的ITEST对象。不幸的是,通用列表中没有任何项目。
你能帮忙吗?我做错了什么?
在此先感谢。
问候,亲
//编辑
所以,我对于我的问题编译的类:
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
namespace ObjectContracts
{
public class Program
{
static void Main(string[] args)
{
var container = new CompositionContainer(new TypeCatalog(typeof (IFoo), typeof (Bar), typeof(Foo)));
var bar = container.GetExportedValue<Bar>();
Console.WriteLine(bar.Foo.Message);
Console.ReadLine();
}
}
[InheritedExport]
public interface IFoo
{
string Message { get; set; }
}
[Export]
public class Bar
{
[ImportingConstructor]
public Bar([Import("Foo")]IFoo foo)
{
this.Foo = foo;
}
public IFoo Foo { get; set;}
}
[Export("Foo")]
public class Foo : IFoo
{
public Foo()
{
Message = ":-)";
}
public string Message { get; set; }
}
}
我该怎么办错了吗?请帮我:-)
问候,帕特里克
你会得到什么?如果有的话....你知道MEFX组成分析工具(http://msdn.microsoft.com/en-us/library/ff576068.aspx),它可以帮助你解决这种情况吗? – 2010-09-06 16:21:44
感谢您的建议。但所有部件都正确装载。只有属性不会被正确注入... :-( – bitsmuggler 2010-09-07 06:20:30