c# - CS3016 - 在使用 Prism + MEF ExportModule 时我们如何解决这个问题?

标签 c# attributes prism mef cls-compliant

[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");
    }
}

关于c# - CS3016 - 在使用 Prism + MEF ExportModule 时我们如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158016/

相关文章:

c# DataContractSerializer 继承

javascript - 您可以通过命名标题属性更改链接标题吗?

c# - 在 PRISM 中导航到新 View 时如何传递对象?

c# - 我应该仅使用事件聚合器来防止内存泄漏吗?

c# - 如果 DataSource 不包含任何项目,我如何在 ASP.NET C# 中隐藏转发器?

c# - 在 DataGridView 中显示过滤的行

c# - 在 C# 中创建字段的属性

c# - 如何检索属性关联对象的实例?

c# - UI 未从单独 ViewModel 的命令调用的 ObservableCollection 进行更新

c# - 如何跨进程边界编码进程外 COM 引用?