Мне нужно создать динамический прокси на С#. Я хочу, чтобы этот класс обернул другой класс и взял на себя его открытый интерфейс, перенаправляя вызовы для этих функций:
class MyRootClass
{
public virtual void Foo()
{
Console.Out.WriteLine("Foo!");
}
}
interface ISecondaryInterface
{
void Bar();
}
class Wrapper<T> : ISecondaryInterface where T: MyRootClass
{
public Wrapper(T otherObj)
{
}
public void Bar()
{
Console.Out.WriteLine("Bar!");
}
}
Вот как я хочу его использовать:
Wrapper<MyRootClass> wrappedObj = new Wrapper<MyRootClass>(new MyRootClass());
wrappedObj.Bar();
wrappedObj.Foo();
производить:
Bar!
Foo!
Любые идеи?
Какой самый простой способ сделать это?
Как лучше всего это сделать?
Большое спасибо.
ОБНОВЛЕНИЕ
Я попытался следовать рекомендации Вернайта и реализовать это с помощью динамических прокси С# 4.0. К сожалению, я все еще застрял. Смысл прокси-сервера в том, чтобы имитировать другой ожидаемый (обычно, обычно) интерфейс. Использование DynamicObject требует от меня изменить все клиенты этого, чтобы использовать «динамический» вместо «ISecondaryInterface».
Есть ли способ получить прокси-объект, чтобы, когда он обертывал A, он объявлял (статически?), что он поддерживает интерфейс A; и когда он обертывает B, он объявляет, что поддерживает интерфейс B?
ОБНОВЛЕНИЕ 2
Например:
class MySecretProxy : DynamicObject, ISecondaryInterface
{
public override void TryInvokeMember(...) { .. }
// no declaration of Bar -- let it be handled by TryInvokeMember
}