백만 가지 방법의 클래스가있는 API를 다루고 있습니다.이 메소드가하는 일을 알고 있으며, 웹 서비스의 프록시 일뿐입니다.프로그래밍 방식으로 클래스에 메서드를 추가 하시겠습니까?
API는 내부적으로 적절한 메소드 이름을 호출하는 리플렉션을 사용하여 이러한 프록시 메소드를 호출합니다 (왜 이렇게했는지 묻지 않음).
API에 의해 구현되지 않은 웹 서비스의 메소드가 있으며 이러한 프록시 메소드를 동적으로 주입해야합니다.
내 질문은입니다. 어떻게 기존 메서드 (확장 메서드가 아닌)에 메서드를 추가 할 수 있습니까?
나는 Reflection.Emit으로이를 수행 할 수 있지만 MSIL을 모른다.
어쨌든 API 클래스와 동일한 기본 클래스를 상속하는 다른 클래스를 만들었으므로이 클래스를 메서드를 구현하여 API 클래스에 메서드를 복사 할 수있는 방법이 있습니다. 같은 클래스를 참조하는 기본 클래스의 메서드 만 호출합니다.
동적으로 "주입"해야하는 이유는 무엇입니까? 사람들이 외부 API에 서비스를 추가하고 다시 컴파일하지 않고 서비스를 호출 할 수 있기를 정말로 원하십니까? –
@KirkWoll, 그들이 제공하는 .NET API는 웹 API의 일부만을 다루고 있습니다. 다른 웹 파트를 숨기려면 몇 가지 메소드를 추가하고 싶습니다.하지만 모든 호출은이 클래스의 메소드를 리플렉션으로 호출하는 메시지를 통해 진행됩니다. 그것이 유일한 선택 인 것 같아요. 그렇지 않으면 전체 API를 다시 작성해야합니다. 훨씬 더 많은 노력이 필요합니다. 그래서 네, 그 방법을 주입하고 싶습니다. 또한, (속성 클래스에 대한) 내 어셈블리를 확인하고 등록해야하는 '모든 메소드 등록'기능을 만들겠습니다. 제가 말했듯이, 그것들은 단지 프록시 메소드 일 뿐이며, 그것을 구축하는 로봇을 만드는 것은 쉽습니다. – Shimmy
컴파일 타임에 * full * API를 알았을 때 ** 동적으로 ** 메소드를 추가하려는 이유를 아직도 이해하지 못합니다. 그건 내 말이 맞지 않아. –