Open Source Library для генерации конкретных типов из интерфейсов во время выполнения? - PullRequest
5 голосов
/ 22 августа 2011

Я работаю над тем, что нужно взять в контракте (указан как интерфейс) и создать экземпляр на лету, без какого-либо формально определенного конкретного класса, который соответствует этому интерфейсу.

Примерсинтаксиса выглядит следующим образом:

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

Я видел, что другие библиотеки .NET предлагают такое поведение (вспоминается NServiceBus), и мне интересно, есть ли сторонняя библиотека, котораяабстрагирует время выполнения кода gen.Я думал, что Castle DynamicProxy будет подходящим местом для поиска, но, похоже, он полностью сфокусирован на проксировании и перехвате, и, похоже, не раскрывает аспект генерации кода.создайте класс на лету, однако я бы предпочел использовать надежную библиотеку с открытым исходным кодом, если она существует.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Импровизированный интерфейс - это то, что вам нужно: - http://code.google.com/p/impromptu-interface/

Я использовал его для создания полиморфных типов в .NET .

Вы также можете посмотреть на Клей .

1 голос
/ 22 августа 2011

А как насчет библиотек-насмешников - NMock и RhinoMocks?

Вы также можете добавить реализации к конкретным типам, используя заглушки / ожидания.

В частности, Rhino имеет хороший лямбда-синтаксис для того, что вам нужно.

Не полностью ли это соответствует вашим потребностям?

Как то так?

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