2014-07-08 1 views
1

NLog의 LogLevel 유형에 대한 사용자 지정을 만들고 싶습니다. 인스턴스는 FromOrdinal 정적 메소드로 작성할 수 있습니다.특정 형식을 만들기 위해 자동 수정 사용자 지정

작성한 서수를 범위 (0..5)로 제한하려고합니다. 발전기로 전체 조명기를 사용자 정의하고 싶지는 않습니다 (다른 정수가 더 클 수 있음).

class NLogCustomization : ICustomization 
    { 
     public void Customize(IFixture fixture) 
     { 
      fixture.Customize<NLog.LogLevel>(
       c => c.FromFactory(() => 
        { 
         var ordinal = this.nlogOrdinalLevelFactory.Create<int>(); //Throws invalid cast exception 
         return NLog.LogLevel.FromOrdinal((int)ordinal); 
        })); 
     } 

     private readonly ISpecimenBuilder nlogOrdinalLevelFactory = new RandomNumericSequenceGenerator(0,5); 
    } 

불행하게도 위의 코드를 InvalidCastException이 예외 :

여기 내가 사용하려고 코드의 조각입니다. 여기서 내가 뭘 잘못하고 있니?

버전 3.19.1을 사용하고 있습니다. Create<T> 할 대신,이 예제에서는

object Create(object request, ISpecimenContext context); 

:

fixture.Customize<LogLevel>(c => c.FromFactory(() => 
{ 
    var ordinal = this.nlogOrdinalLevelFactory 
     .Create(typeof(int), new SpecimenContext(fixture)); 

    return NLog.LogLevel.FromOrdinal((int)ordinal); 
})); 

답변

1

ISpecimenBuilder 인터페이스를 사용하여 직접 RandomNumericSequenceGenerator 및 기타 ISpecimenBuilder를 소비합니다. Fixture 이외의 인터페이스에서 호출하지 않아도 인터페이스에 확장 메소드 (예 : Create)가 정의 된 이유는 무엇입니까? 반 직관적 인 것 같아.
+0

덕분에, 나는 그것을 시도 할 것이다 – dzendras

관련 문제