MVC 温莎城堡 - 控制器构造函数中不能有多个参数



我用Castle Windsor设置了我的MVC应用程序http://www.codeproject.com/Articles/543810/Dependency-Injection-and-Unit-Of-Work-using-Castle

当我有以下代码时,编译器进入第一个构造函数,并且我的服务没有被初始化。

 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()
            );
    }

编辑

我看到UserMessageService的错误(UserLoginService已加载,但它具有与UserMessageService相同的声明体)

Some dependencies of this component could not be statically resolved.
'Core.Services.Implementation.UserMessageService' is waiting for the following dependencies:
- Service 'Core.Repositories.IUserMessagesRepository' which was not registered.

我不得不将安装程序类修改为:

            Classes.FromAssembly(typeof(NHUserLoginRepository).Assembly)
                   .BasedOn<IRepository>()
                   .WithService.FromInterface().LifestyleTransient(),
            Classes.FromAssembly(typeof(UserLoginService).Assembly)
                   .BasedOn<IService>()
                   .WithService.FromInterface().LifestyleTransient(),

相关内容

最新更新