Мои интерфейсы находятся в отдельном проекте, и я предполагаю, что мне нужно сделать что-то особенное, когда я регистрирую свои службы и т. Д. В windsor.
Я получаю ошибку:
Type ABC.Interfaces.Services.IUserService is abstract.
As such, it is not possible to instansiate it as implementation of service ABC.Interfaces.Services.IUserService.
Мой установщик:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
AllTypes.FromAssemblyContaining<UserService>()
.BasedOn<IUserService>()
.Where(type => type.Name.EndsWith("Service"))
.WithService.DefaultInterface()
.Configure(c => c.LifeStyle.Singleton));
}
container.Register(
AllTypes.FromAssemblyContaining<UserRepository>()
.BasedOn<IUserRepository>()
.Where(type => type.Name.EndsWith("Repository"))
.WithService.DefaultInterface()
.Configure(c => c.LifeStyle.PerWebRequest)
);
Я получил сообщение об ошибке, а затем добавил предложение .BasedOn<....>()
, поскольку полагал, что это связано с тем, что мои интерфейсы находятся в отдельном проекте (и, следовательно, в сборке) в качестве фактической реализации.
Должен ли я сообщить Каслу сборку этого интерфейса?
Или проблема в другом?
Обновление II
Мой код:
public class HomeController : Controller
{
private IUserService _userService;
public HomeController(IUserService userService)
{
this._userService = userService;
}
}
В сервисах сборки:
public class UserService : IUserService
{
private IUserRepository _repository;
public UserService(IUserRepository repository)
{
this._repository = repository;
}
public void Create(IUser user)
{
_repository.Create(user);
}
public IUser Get(int id)
{
return _repository.Get(id);
}
}
В сборке интерфейсов:
public interface IUserService
{
void Create(IUser user);
IUser Get(int id);
}