我有以下接口和基类。
UserRespository:
public class UserRepository : Repository<User>, IUserRepository
{
public IAuthenticationContext authenticationContext;
public UserRepository(IAuthenticationContext authenticationContext)
:base(authenticationContext as DbContext) { }
public User GetByUsername(string username)
{
return authenticationContext.Users.SingleOrDefault(u => u.Username == username);
}
}
UserService:
public class UserService : IUserService
{
private IUserRepository _userRepository;
public UserService(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public IEnumerable<User> GetAll()
{
return _userRepository.GetAll();
}
public User GetByUsername(string username)
{
return _userRepository.GetByUsername(username);
}
}
现在,当我注入UserService时,它的_userRepository为null。 知道我需要配置什么来让它正确地注入存储库。
我有以下安装代码:
public class RepositoriesInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Types.FromAssemblyNamed("DataAccess")
.Where(type => type.Name.EndsWith("Repository") && !type.IsInterface)
.WithServiceAllInterfaces()
.Configure(c =>c.LifestylePerWebRequest()));
//AuthenticationContext authenticationContext = new AuthenticationContext();
}
}
public class ServicesInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Types.FromAssemblyNamed("Services")
.Where(type => type.Name.EndsWith("Service") && !type.IsInterface)
.WithServiceAllInterfaces()
.Configure(c => c.LifestylePerWebRequest()));
}
}
我将如何注册具体的DbContext&#39>
public class AuthenticationContext : DbContext
{
public AuthenticationContext() : base("name=Authentication")
{
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
更新
当我删除UserService中的默认构造函数时,我收到以下错误:
Castle.MicroKernel.Handlers.HandlerException:无法创建组件&#39; DataAccess.Repositories.UserRepository&#39;因为它有依赖性来满足。 &#39; DataAccess.Repositories.UserRepository&#39;正在等待以下依赖项: - Service&#39; DataAccess.AuthenticationContext&#39;没有注册。
答案 0 :(得分:1)
在我的情况下,这是因为我在实现Interface的类中没有默认构造函数
答案 1 :(得分:0)
在你的&#34; UPDATE&#34;中基于您的例外情况您需要注册您的AuthenticationContext类,以便Windsor知道如何创建它。
container.Register(
Component.For<AuthenticationContext>()
.ImplementedBy<AuthenticationContext>());
但是,根据UserRepository.cs代码,它依赖于接口IAuthenticationContext(而不是AuthenticationContext),因此您将指定接口的实现:
container.Register(
Component.For<IAuthenticationContext>()
.ImplementedBy<AuthenticationContext>());
答案 2 :(得分:0)
对于那些稍后查看此问题的人,还请确保实现类的名称以接口名称开头。
例如:
class FooBarImpl : IFooBar
不是
class Foo : ISomething