2011-11-16 6 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

, 정말 기대했다 기존 클래스에서 확장하지 않고도 솔루션을 사용할 수 있습니다. 그러나 아마도 그것이 유일한 방법입니다 (경고를 억제하는 것 외에는). –