Próbuję dynamicznie utworzyć klasę proxy. Wiem, że istnieją pewne bardzo dobre ramy, aby to zrobić, ale jest to wyłącznie projekt dla zwierząt domowych jako ćwiczenie do nauki, więc chciałbym to zrobić sam.Dynamiczne tworzenie klasy proxy
Jeśli, na przykład, mam następujące klasy wykonawczych interfejs:
interface IMyInterface
{
void MyProcedure();
}
class MyClass : IMyInterface
{
void MyProcedure()
{
Console.WriteLine("Hello World");
}
}
przechwycić metody do tej klasy w celu ich dziennik, tworzę inną klasę (moja wersja klasy proxy) który implementuje ten sam interfejs, ale zawiera odniesienie do "prawdziwej" klasy. Ta klasa wykonuje akcję (na przykład rejestrowanie), a następnie wywołuje tę samą metodę na prawdziwej klasie.
Na przykład:
class ProxyClass : IMyInterface
{
private IMyInterface RealClass { get; set; }
void MyProcedure()
{
// Log the call
Console.WriteLine("Logging..");
// Call the 'real' method
RealClass.MyProcedure();
}
}
Dzwoniący następnie wywołuje wszystkie metody na klasę proxy zamiast (Używam podstawowy domowy napar IoC kontenera wstrzyknąć klasę proxy zamiast rzeczywistej klasie). Używam tej metody, ponieważ chciałbym móc zamienić RealClass
w czasie wykonywania na inną klasę implementującą ten sam interfejs.
Czy istnieje sposób utworzenia ProxyClass
w czasie wykonywania i wypełnienia jego właściwości RealClass
, aby mogła być używana jako proxy dla prawdziwej klasy? Czy istnieje prosty sposób na zrobienie tego lub czy muszę użyć czegoś takiego jak Reflection.Emit
i wygenerować MSIL?
Co masz na myśli generować dynamicznie? Masz na myśli, że masz obiekt Type i chcesz utworzyć obiekt tego typu? – JJ15k
Tak. Chciałbym utworzyć instancję klasy ProxyClass w środowisku wykonawczym z IMyInterface, zapełnić jej właściwość "RealClass" odwołaniem do prawdziwej klasy, aby można było wykorzystać wszystkie połączenia do prawdziwej klasy. Będę edytować pytanie, aby wyjaśnić dziękuję. –
Zobacz DynamicProxy Castle'a http://www.castleproject.org/projects/dynamicproxy/ –