Я хочу создать гибкую систему отчетности для своего приложения. Пока у меня в голове только концепция, и мне нужны советы по ее реализации. Я использую Crystal Reports для визуализации отчетов и знаю, как динамически загружать отчеты.
Теперь идея состоит в том, что каждый отчет будет упакован как отдельная сборка (.dll). Среда создания отчетов будет загружать каждый пользовательский отчет и связываться с ним через четко определенный интерфейс, например:
<code>public interface IReport
{
string GetTitle();
string GetDescription();
void SetParameter();
void Print();
}
Также будет некоторая базовая реализация (в виде абстрактного класса), которая будет обрабатывать некоторые общие операции с отчетами (например, привязку к источнику данных и т. Д.):
<code>public abstract class Report
{
...
}
Внутри каждой dll будет реализация конкретного класса, представляющая тот или иной отчет:
<code>public class CustomersReport : Report
{
...
}
Теперь я должен выяснить следующее:
1) Как динамически найти и загрузить dll?
2) Как создать экземпляр конкретного класса (CustomerReport) и привести его к IReport, чтобы вызвать для него необходимые методы?
Вы когда-нибудь внедряли такую расширяемую систему? Не могли бы вы поделиться своим опытом / фрагментами кода?
Заранее спасибо.
EDIT:
При изучении этого вопроса я нашел статью Джона Скита о Плагины и исключения приведения , которая может оказаться полезной.