MVC + Виндзорский замок.Хранилища не регистрируются должным образом - PullRequest
0 голосов
/ 28 декабря 2011

Я делаю первые шаги в MVC.Я просто пытаюсь создать простое приложение, используя MVC2 + Windsor Castle (и NHibernate тоже).

У меня проблема с репозиториями ... кажется, что эти репозитории не зарегистрированы, и я немного растерялся.Прочитав тонны веб-сайтов в поисках информации, я решил спросить здесь.Давайте посмотрим код.

Относительно репозиториев, иерархия классов:

public interface ICommonRepository{}

также

public interface IRepository<T> : ICommonRepository
{
    IEnumerable<T> FindAll();

}

и

public class BookRepository:IRepository<Book>
{
    public IEnumerable<Book> FindAll()
    {

       throw new NotImplementedException();
    }


}

Относительно моего сервиса:

public class BookService:IService
{
    private IRepository<Book> _bookRepository;

    public BookService(IRepository<Book> repository)
    {
        this._bookRepository = repository;
    }

    public IEnumerable<Book>FindAllBooks()
    {
       return this._bookRepository.FindAll();
    }
}

и, наконец, мой "установщик виндзора", который пытается зарегистрировать все материалы, созданные в приложении

 public class Installer : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {           
        //Repositories
        container.Register(AllTypes.FromThisAssembly()
                             .BasedOn<IService>(ICommonRepository)
                             .If(t => t.Name.EndsWith("Repository"))
                             .Configure(c => c.LifestyleTransient()));
        //Services
        container.Register(AllTypes.FromThisAssembly()
                              .BasedOn<IService>()
                              .If(Component.IsInSameNamespaceAs<BookService>())
                              .If(t => t.Name.EndsWith("Service"))
                              .Configure(c => c.LifestyleTransient()));
        //Controllers
        container.Register(AllTypes.FromThisAssembly()
                            .BasedOn<IController>()
                            .If(Component.IsInSameNamespaceAs<HomeController>())
                            .If(t => t.Name.EndsWith("Controller"))
                            .Configure(c => c.LifestyleTransient()));

    }
}

Итак ... когда я пытаюсь что-то запросить в BookController, я получаюследующая ошибка:

Невозможно создать компонент «Example_MVC.Services.BookService», так как он имеет зависимости, которые должны быть удовлетворены. «Пример_MVC.Services.BookService» ожидает следующие зависимости: - Сервис «Example_MVC».Repositories.IRepository`1 [[Example_MVC.Class.Book, Example_MVC, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null]] ', который не был зарегистрирован.

Забавно, чтоРепозиторий отображается в «Потенциально неверно настроенных компонентах», поэтому я не уверен, что этот репозиторий не добавляется или просто ошибка в другом месте.

Есть идеи?

Спасибо за ваше время

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 29 декабря 2011

Это все в сообщении об исключении. Ни один компонент не был зарегистрирован, выставляя IRepository<Book>.

Возможно, вы регистрируете свои репозитории не так, как вы предполагали. Посмотрите документацию .

...