Могу ли я интегрировать методы класса контейнера с методами универсального интерфейса? - PullRequest
2 голосов
/ 03 июля 2011

У меня есть контейнерный класс Foo<TInterface>, который принимает параметр произвольного типа интерфейса и строку "strCode" в своем конструкторе.

После создания экземпляра Foo strCode компилируется с помощью CSharpCodeProvider, и через Reflection соответствующий тип располагается во вновь скомпилированном коде, затем приводится к типу TInterface и поднимается в Foo до свойства TInterface bar.

Это работает нормально, и клиент может получить доступ к foo.bar без проблем. Однако Foo также содержит (среди прочих методов) метод с именем Recompile, который в основном принимает и компилирует новую строку кода вышеупомянутым способом. Это также хорошо работает, но это означает, что клиент в конечном итоге использует API Foo, где методы организованы примерно так:

foo.bar.MakeCoffee
foo.bar.DoMagic
foo.Recompile

Я бы предпочел:

foo.MakeCoffee
foo.DoMagic
foo.Recompile

Другими словами, я хотел бы вернуть экземпляр класса с доступом на верхнем уровне как к универсальным методам интерфейса, так и к методам API Foo.

В идеале было бы неплохо вернуть экземпляр Foo<TInterface>, но я понимаю, что дженерики C # не допускают этого. Я был бы рад опубликовать код, если это необходимо, но сначала хочу убедиться, что я не лаю неправильное дерево из-за статической природы типов C #.

1 Ответ

1 голос
/ 03 июля 2011

Я думаю, вы должны использовать прокси-библиотеку, такую ​​как Castle Dynamic Proxy или linfu .

Какую цель вы пытаетесь достичь? Вы хотите сделать АОП?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...