5 Stimmen

CS3016 - Wie können wir dies bei der Arbeit mit Prism + MEF ExportModule umgehen?

[assembly: CLSCompliant(true)]

//CS3016: Arrays as attribute arguments is not CLS-compliant.
[ModuleExport(typeof(ModuleA), DependsOnModuleNames = new [] { "ModuleB" })]
public class ModuleA : IModule { }

Das einzige, was mir einfällt, ist, die Klasse als [CLSCompliant(false)] aber ich frage mich, ob es einen besseren Weg gibt, dies zu umgehen?

3voto

nemesv Punkte 136384

Als Abhilfe können Sie Ihr eigenes CLS-kompatibles ModuleExportAttribute die eine kommagetrennte Liste anstelle eines String-Arrays verwendet:

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

Verwendung:

[StringListModuleExport(typeof(ModuleA), DependsOnModuleNameList = "ModuleB,ModuleC")]
public class ModuleA : IModule
{
    public void Initialize()
    {
        Debug.WriteLine("ModuleA init");
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X