Я делаю первые шаги в 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]] ', который не был зарегистрирован.
Забавно, чтоРепозиторий отображается в «Потенциально неверно настроенных компонентах», поэтому я не уверен, что этот репозиторий не добавляется или просто ошибка в другом месте.
Есть идеи?
Спасибо за ваше время
С наилучшими пожеланиями