У меня есть проект под названием MyProjectReport (сборка). В этом проекте у меня есть класс MyMainReport. В этом классе (я использую шаблон репозитория в сборке) у меня есть два интерфейса. Один интерфейс называется IReportRepository1 и IReportRepository2. В MyMainReport мой конструктор выглядит следующим образом:
public MyMainReport(IReportRepository1 reportRepository1 , IReportRepository1 reportRepository2 )
{
this.reportRepository1 = reportRepository1 ;
this.reportRepository2 = reportRepository2 ;
}
. У меня есть NinjectModule следующим образом:
public class DINinjectServiceModule : NinjectModule
{
public override void Load()
{
Bind<IReportRepository1 >()
.To<ReportRepository>();
Bind<IReportRepository2 >()
.To<ReportRepository2>();
}
}
. Обычно приложение инициализирует ядро в глобальном asax. Пример одного из веб-сервисов WCf будет следующим:
public class Global : NinjectWcfApplication
{
protected override IKernel CreateKernel()
{
return new StandardKernel(new DINinjectServiceModule());
}
}
Таким образом, мои репозитории будут загружаться автоматически. Однако, поскольку у меня есть сборка, у меня нет файла Global.asax.
Я создал класс, называемый селектором отчетов. я использую шаблон декоратора для динамической загрузки моих отчетов.
public class ReportSelector : IReportBuilder
{
IReportBuilder buildareport;
public ReportSelector(IReportBuilder buildareport)
{
this.buildareport = buildareport;
}
public void CreateDocument()
{
buildareport.CreateDocument();
}
}
Ниже показано, как я обычно вызываю построитель отчетов без использования конструктора IOC.
IReportBuilder buildrep = new ReportSelector(new MyMainReport.ReportBuilder.MyMainReport());
BuildReport(buildrep);
Тем не менее, он ищет меня, чтобы передать интерфейсы моего репозитория. Он не загружает их динамически. Как мне это настроить. для меня приведенный выше вызов декоратора был бы похож на мой application_start в моем файле Global.asax. Как мне загрузить свои репозитории в сборку/проект?
Спасибо, Ремо Глор! Я решил, что мне нужна фабрика, подобная той, что используется для контроллера в MVC. Однако я не уверен, как мне поступить. Большинство примеров имеют либо расширение, либо использование базового класса, такого как Controller. Я пишу веб-сервис, который будет выполнять пакетный процесс. Использование веб-службы не является моим выбором для этого процесса, хотя я знаю, что некоторые люди предпочитают использовать для этого веб-службы. У меня есть сборка, которая создает динамические PDF-файлы и отправляет эти PDF-файлы по электронной почте. Я хотел бы использовать модуль Ninject для загрузки моих репозиториев, как в проекте MVC. Я не уверен, как это сделать в отдельной сборке. В настоящее время у меня есть селектор отчетов, как указано выше, это похоже на корневой каталог запуска любого приложения. В моем веб-сервисе есть метод BuildAllReports, который любое приложение может вызвать для использования сервиса. Таким образом, при вызове BuildAllReports выполняется пакетный процесс. Можете ли вы привести пример использования Ninject в сборке, как уже упоминалось? Спасибо