2011-11-16 3 views
5
[assembly: CLSCompliant(true)] 

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

私は考えることができる唯一のことは[CLSCompliant(false)]としてクラスをマークすることですが、これを回避するためのより良い方法がある場合、私は不思議でしたか?文字列配列の代わりにカンマ区切りのリストを使用して、あなたに準拠ModuleExportAttributeを独自のCLSを実装することができます回避策としてCS3016 - Prism + MEF ExportModuleを使用して作業する場合、どうすればこの問題を回避できますか?

答えて

3

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

、私は本当に期待していました既存のクラスから拡張する必要はありません。しかし、おそらくそれが唯一の方法です(警告を抑制すること以外)。 –

関連する問題