CS3016 -在使用Prism + MEF ExportModule时,我们如何解决这个问题?
本文关键字:何解决 解决 问题 我们 Prism ExportModule MEF CS3016 | 更新日期: 2023-09-27 18:15:07
[assembly: CLSCompliant(true)]
//CS3016: Arrays as attribute arguments is not CLS-compliant.
[ModuleExport(typeof(ModuleA), DependsOnModuleNames = new [] { "ModuleB" })]
public class ModuleA : IModule { }
我唯一能想到的是将类标记为[CLSCompliant(false)]
,但我想知道是否有更好的方法来解决这个问题?
作为一种解决方案,您可以实现自己的CLS兼容ModuleExportAttribute
,它使用逗号分隔的列表而不是字符串数组:
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class StringListModuleExportAttribute : ExportAttribute, IModuleExport
{
public StringListModuleExportAttribute(Type moduleType)
: base(typeof(IModule))
{
ModuleName = moduleType.Name;
ModuleType = moduleType;
}
public string ModuleName { get; private set; }
public Type ModuleType { get; private set; }
public InitializationMode InitializationMode { get; private set; }
public string[] DependsOnModuleNames
{
get
{
if (string.IsNullOrEmpty(DependsOnModuleNameList))
return new string[0];
return DependsOnModuleNameList.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries);
}
}
public string DependsOnModuleNameList { get; set; }
}
用法:
[StringListModuleExport(typeof(ModuleA), DependsOnModuleNameList = "ModuleB,ModuleC")]
public class ModuleA : IModule
{
public void Initialize()
{
Debug.WriteLine("ModuleA init");
}
}