2011-08-21 3 views
5

저는 (인터페이스로 지정된) 계약을 받아야하고,이 인터페이스를 충족시키는 형식적으로 정의 된 구체적인 클래스없이 즉석에서 인스턴스를 작성해야합니다.런타임 동안 인터페이스에서 콘크리트 유형을 생성하기위한 오픈 소스 라이브러리?

구문의 예는 다음과 같이이다 : 나는 다른 .NET 라이브러리와 프레임 워크는이 같은 행동을 (NServiceBus가 마음에 온다) 제공 본 적이

IExampleMessage message = MessageBuilder.Create<IExampleMessage>(x => { 
    x.PropertyA = "Test"; 
    x.PropertyB = 5; 
}); 

, 그리고이 있는지 궁금 해요 런타임 코드를 추상화 한 써드 파티 라이브러리. Castle DynamicProxy가 보일 장소가 될 것이라고 생각했지만, 이것은 프록시와 인터셉팅에 전적으로 집중되어 있으며 코드 생성 측면을 드러내지 않는 것으로 보입니다.

Reflection.Emit을 사용하여 클래스를 생성하는 구현을 작성할 수 있지만, 솔리드 오픈 소스 라이브러리가있는 경우이를 사용하고 싶습니다.

제안 사항?

+0

궁금합니다. 메소드와의 인터페이스가 어떻게 지원 될까요? 이 구문을 사용하여 메소드의 사용자 정의 구현을 어떻게 지정 하시겠습니까? –

+0

메서드가있는 인터페이스가 지원되지 않습니다. –

+0

BLTookit에서 비슷한 코드가 보입니다. – adontz

답변

1

조롱 라이브러리 - NMock 및 RhinoMock은 어떻게됩니까?

스텁/기대를 사용하여 구체적인 유형에 구현을 추가 할 수 있습니다.

Rhino에는 특히 원하는 종류의 멋진 람다 기반 구문이 있습니다.

필요 사항을 채우지 않습니까?

이와 비슷한?

IExampleMessage message = MockRepository.GenerateStub<IExampleMessage>(); 
message .Stub(x => x.PropertyA).Return("Text")  
message .Stub(x => x.PropertyB).Return(5) 
2

즉석 인터페이스는 당신이 필요로하는 것입니다 : - 나는 polymorphic types in .NET을 만드는 데 사용했습니다 http://code.google.com/p/impromptu-interface/

.

Clay을 볼 수도 있습니다.

+0

Dynamic에서 벗어나려고했습니다. 그러나 그 물건은 꽤 멋지다. –

+1

@ Jonathan-Holland는 설명하는 유스 케이스에서 즉흥적으로 사용할 때 코드에서 동적 사용을 실제로 볼 필요는 없습니다 (장면 뒤에서 일어날지라도). 예제 구현 :'public T Create (액션 init) 여기서 T : class {var message = new ExpandoObject(). ActLike (); init (메시지); return message;}' – jbtule

관련 문제