C# MVC温莎城堡-can';在控制器构造函数中不能有多个参数
我用Castle Windsor安装了我的MVC应用程序,从 当我有以下代码时,编译器进入第一个构造函数,并且我的服务没有被初始化C# MVC温莎城堡-can';在控制器构造函数中不能有多个参数,c#,asp.net-mvc,castle-windsor,C#,Asp.net Mvc,Castle Windsor,我用Castle Windsor安装了我的MVC应用程序,从 当我有以下代码时,编译器进入第一个构造函数,并且我的服务没有被初始化 private readonly IUserLoginService userLoginService; private readonly IUserMessageService userMessageService; public BaseApiController() { } public BaseApiController(IUserLogi
private readonly IUserLoginService userLoginService;
private readonly IUserMessageService userMessageService;
public BaseApiController()
{
}
public BaseApiController(IUserLoginService userLoginService, IUserMessageService userMessageService)
{
this.userLoginService = userLoginService;
this.userMessageService = userMessageService;
}
但是,当我删除第二个参数时,编译器进入这个(正确的)构造函数
public BaseApiController(IUserLoginService userLoginService)
{
this.userLoginService = userLoginService;
}
那么,我不能向我的ApiController
构造函数添加多个参数的原因是什么?所有服务都在同一命名空间中
容器安装程序类:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Kernel.ComponentRegistered += Kernel_ComponentRegistered;
//Register all controllers
container.Register(
//Nhibernate session factory
Component.For<ISessionFactory>().UsingFactoryMethod(
//CreateNhSessionFactory
NHSessionFactoryCreator.CreateNhSessionFactory
).LifeStyle.Singleton,
//Unitofwork interceptor
Component.For<NHUnitOfWorkInterceptor>().LifeStyle.Transient,
//All repoistories
Classes.FromAssembly(Assembly.GetAssembly(typeof(NHUserLoginRepository))).InSameNamespaceAs<NHUserLoginRepository>().WithService.DefaultInterfaces().LifestyleTransient(),
//All services
Classes.FromAssembly(Assembly.GetAssembly(typeof(UserLoginService))).InSameNamespaceAs<UserLoginService>().WithService.DefaultInterfaces().LifestyleTransient(),
//All MVC controllers
Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient()
);
}
我必须将installer类修改为:
Classes.FromAssembly(typeof(NHUserLoginRepository).Assembly)
.BasedOn<IRepository>()
.WithService.FromInterface().LifestyleTransient(),
Classes.FromAssembly(typeof(UserLoginService).Assembly)
.BasedOn<IService>()
.WithService.FromInterface().LifestyleTransient(),
Classes.fromsassembly(typeof(NHUserLoginRepository).Assembly)
.BasedOn()
.WithService.FromInterface().LifestyleTransient(),
Classes.fromsassembly(typeof(UserLoginService.Assembly)
.BasedOn()
.WithService.FromInterface().LifestyleTransient(),
您的IUserMessageService
是否明确注册在IWindsorContainer
中?如果在大的container.Register()
调用后放置断点,则可以检查container
以检查已注册的服务
Classes.FromAssembly(typeof(NHUserLoginRepository).Assembly)
.BasedOn<IRepository>()
.WithService.FromInterface().LifestyleTransient(),
Classes.FromAssembly(typeof(UserLoginService).Assembly)
.BasedOn<IService>()
.WithService.FromInterface().LifestyleTransient(),