Мне нужно создать динамический прокси в C #. Я хочу, чтобы этот класс обернул другой класс и использовал его общедоступный интерфейс, перенаправляя вызовы для этих функций:
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!
Есть идеи?
Какой самый простой способ сделать это?
Какой лучший способ сделать это?
Большое спасибо.
UPDATE
Я попытался следовать рекомендации Wernight и реализовать ее с помощью динамических прокси-серверов C # 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
}