@Yum1

Как создать динамический прокси объект на основе класса или интерфейса в C#?

Добрый день,

В Java есть функционал, который позволяет создавать динамические прокси на основе интерфейсов или классов. Например через механизм JDK - проксирование только интерфейса, CGLIB, ByteBuddy - проксирование классов и интерфейсов. Выглядит это примерно так: https://www.baeldung.com/cglib

Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(PersonService.class);
enhancer.setCallback((MethodInterceptor) (obj, method, args, proxy) -> {
    if (method.getDeclaringClass() != Object.class && method.getReturnType() == String.class) {
        return "Hello Tom!";
    } else {
        return proxy.invokeSuper(obj, args);
    }
});

PersonService proxy = (PersonService) enhancer.create();

assertEquals("Hello Tom!", proxy.sayHello(null));
int lengthOfName = proxy.lengthOfName("Mary");
 
assertEquals(4, lengthOfName);


Скажите пожалуйста, можно ли сделать подобное встроенными средствами C# и .NET?

По итогу мне нужна сгенерированная в рантайме имплементация интерфейса, с invocation handler-ом. Ведь это как-то работает в RPC по типу WCF, значит реализуемо. На SO есть вот такой ответ https://stackoverflow.com/questions/8387004/how-to...
Но насколько я понимаю там немного другое.

Помогите пожалуйста, кто проворачивал подобную штуку (приведите пример кода, если не трудно)
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Есть www.castleproject.org/projects/dynamicproxy
На основе него все делают всякие прокси в рантайме, которые перехватывают вызовы чего-либо.

Вот документация: https://github.com/castleproject/Core/blob/master/...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы