【发布时间】:2013-12-28 17:16:20
【问题描述】:
我在 MEF 中为 ImportMany 创建了自定义元数据属性,但 ImportMany 始终为空。
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class ,AllowMultiple = false)]
public class ModuleAttribute : ExportAttribute ,IModuleMetadata
{
public ModuleAttribute(string contract)
: base(typeof(IScreen))
{
Name = contract;
Region = Region.Sidebar;
IsVisible = true;
}
public string Name { get; set; }
public string Module { get; set; }
public Region Region { get; set; }
public string DisplayName { get; set; }
public bool IsVisible { get; set; }
public string Description { get; set; }
public short Order { get; set; }
public Permissions Permissions { get; set; }
}
这是我导出课程的方式。
[Module("Stock" ,Module = "Stock" ,Order = 1 ,Permissions = Permissions.View)]
internal sealed class StockWorkSpaceViewModel : Screen
屏幕是typeof(IScreen)
这是我的 ImportMany。
[ImportMany]
public IEnumerable<Lazy<IScreen ,IModuleMetadata>> Modules { get; set; }
谁能预测我哪里出错了。
【问题讨论】:
-
能否也添加IModuleMetadata的声明?它是否具有匹配的只读属性?
-
昨天,当我从类中删除默认构造函数时,我能够导入。如果该类具有带有一些代码的无参数构造函数。导入不起作用。我还必须从 Export 中删除合同名称,即我必须使用合同类型导出。
-
我还有一个名为 Settings 的自定义导出,但现在 ImportMany 的设置包括来自 ModuleExport 的类型。我不知道为什么。两者都有不同的元数据接口,但合约类型相同。
-
这里有很多可能出错的地方。如果您没有更多代码,将很难猜到。您可以尝试添加一个失败的完整示例。
标签: c# wpf mef caliburn.micro