2016-11-27 4 views
1

Я очень новичок, когда речь идет об использовании инъекции зависимостей и IoC в Asp.Net. Мое приложение разбито на несколько каталогов одного и того же проекта, так как это небольшой проект.Windsor не устанавливает зависимостей

У меня есть некоторые услуги, которые я хочу вводить в контроллеры. Все они наследуют от пустого интерфейса:

Basic Interface

Установщик за услуги заключается в следующем:

Services Installer

И файл GlobalAsax:

Global.asax.cs

I отлаживают и замечают, что мой класс ServicesInstaller делает ge t, однако, зависимость не установлена, так как в моем контроллере экземпляр одной из моих служб остается нулевым.

У кого-нибудь есть представление о том, как я должен правильно настроить это?

Я хочу, чтобы иметь возможность использовать свою зависимость в моих контроллерах, как это:

public class TestController : Controller 
{ 

    private readonly IPDFService _pdfService; 

    [HttpGet] 
    public ActionResult Index() 
    { 
     //PDFService service = new PDFService(); 
     string pdfFile = _pdfService.GenerateAgendaPdfFromURL("http://google.com", 1); 

     return View((object)pdfFile); 
    } 
} 

Спасибо,

+1

Попробуйте создать конструктор в TestController, который принимает зависимость IPDFService как аргумент. Контейнер разрешит его. – CodingYoshi

+1

Похоже, что вам не хватает конструктора на контроллере, который принимает «IPDFService» и присваивает этот параметр '_pdfService'. Я просто догадываюсь, хотя я не знаю Виндзора. Рассматривали ли вы попытку двигателя IoC с более легким весом для вашего первоначального обучения? DryIoc или Autofac было бы проще. – Brannon

ответ

1

Как указано в Brannon, вы должны добавить конструктор к вам контроллеру, который принимает услугу , Или вы можете изменить своего участника private readonly IPDFService _pdfService; в общественном достоянии. Windsor также будет вводить свойства.

Кроме того, вы должны добавить .WithServiceSelf() к регистрации услуги, как это:

Classes.FromThisAssembly().BasedOn<IService>().WithServiceSelf() 

это регистрирует только типы ваших услуг, а не все реализованные интерфейсы или наследственные типов.

+0

Спасибо, человек, я совсем забыл о добавлении его в конструктор. –