Создать поддельный объект по интерфейсу - PullRequest
5 голосов
/ 17 февраля 2012

Мне нужно динамически создавать поддельные объекты по интерфейсу. Каждый метод и свойство этого поддельного объекта должны просто генерировать исключение NotImplementedException. Есть ли какой-нибудь простой способ сделать это только с помощью API отражения .NET?

Ответы [ 4 ]

7 голосов
/ 17 февраля 2012

Вы можете использовать насмешливый API, например Moq . Он предназначен для насмешек в юнит-тестах, но должен делать то, что вам нужно.

2 голосов
/ 17 февраля 2012

Может быть ImpromptuInterface может помочь.

Пример кода (скопирован с домашней страницы):

    using ImpromptuInterface;
    using ImpromptuInterface.Dynamic;

    public interface IMyInterface{

       string Prop1 { get;  }

        long Prop2 { get; }

        Guid Prop3 { get; }

        bool Meth1(int x);
   }

   //Anonymous Class
    var anon = new {
             Prop1 = "Test",
             Prop2 = 42L,
             Prop3 = Guid.NewGuid(),
             Meth1 = Return<bool>.Arguments<int>(it => it > 5)
    }

    IMyInterface myInterface = anon.ActLike<IMyInterface>();
1 голос
/ 17 февраля 2012

Castle Proxies - это аккуратная библиотека, которая генерирует прокси-объекты для интерфейсов во время выполнения. Все основные насмешливые фреймворки также используют Castle Proxies под капотом.

Кривая обучения круче, чем использование чего-то вроде Moq, но она может быть более подходящей для ваших нужд, так как Moq разработан специально для модульного тестирования, поэтому API может быть слишком «шумным» для того, что вы после того, как.

0 голосов
/ 17 февраля 2012

Боюсь, что ваше единственное решение - использовать Reflection.Emit, и это не очень просто :) См. C # Reflection: Отправка классов в существующие сборки или Reflection Emit для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...