와 기본 클래스에서 어린이 보호 메소드를 호출하려면 어떻게는 동적
protected virtual void InternalChange(DomainEvent @event)
{
((dynamic) this).Apply(@event);
}
아이 필드의 번호를 통해 이벤트를 처리하는 로직을 구현하지만
protected Apply (Message1 message)
{
}
protected Apply (Message2 message)
{
}
를 예 개체를 다음 코드를 얻었다 이것은 액세스 할 수 없다는 오류를 제공합니다. 나는 가상했지만 운이 없었어요.
아이디어가 있으십니까? .. 희망이 있이 방법 같이 반영없이. (예 : http://blogs.msdn.com/b/davidebb/archive/2010/01/18/use-c-4-0-dynamic-to-drastically-simplify-your-private-reflection-code.aspx)
추가 정보 InternalChange를 하위 클래스로 옮길 수는 있지만 ID는 디스패치를 수행하는 자식이 없습니다.
void Apply(AggregateRootHandlerThatMeetsConventionEvent domainEvent)
{
OnAggregateRootPrivateHandlerThatMeetsConventionCalled = true;
}
void Apply(AggregateRootPrivateHandlerThatMeetsConventionEvent domainEvent)
{
OnAggregateRootPrivateHandlerThatMeetsConventionCalled = true;
}
void Apply(AggregateRootProtectedHandlerThatMeetsConventionEvent domainEvent)
{
OnAggregateRootProtectedHandlerThatMeetsConventionCalled = true;
}
protected override void InternalChange(DomainEvent @event)
{
Apply(((dynamic)@event));
}
지금은 작동하지만 그 추한 ID가 오히려 파견에 대해 걱정하지 구현 (부모 초록 및 제작) 아동이 사용하고 편집.
protected void Handle(DomainEvent message)
{
Handle ((dynamic) message);
}
Message1과 Message2는 DynamicEvent를 통해 런타임 캐스팅/오버로딩을 필요로하는 까다로운 부분인데, 구현자가 사용하는 매개 변수를 알지 못하는 이유는 기본 클래스에 추상 메서드를 넣을 수없는 이유입니다. – user1496062
'Message1'과'Message2'가'DomainEvent'에서 상속받은 경우, 그 방향을 함축적으로 업 캐스트 할 수 없습니다. 'InternalChange'로 보내지는 실제 타입을 결정하기 위해'as '키워드를 사용할 것을 권합니다. – Matthew
하지만 코드는 이벤트 소스 DB에서 제공되는 구체적인 유형을 알지 못합니다 ... 물론 케이스 문을 만들거나 반사를 사용할 수 있지만 더 좋은 방법이 있습니까? – user1496062