Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Castle Windsor与mvc web应用程序不同的程序集?_C#_Asp.net Mvc_Castle Windsor - Fatal编程技术网

C# 如何使用Castle Windsor与mvc web应用程序不同的程序集?

C# 如何使用Castle Windsor与mvc web应用程序不同的程序集?,c#,asp.net-mvc,castle-windsor,C#,Asp.net Mvc,Castle Windsor,我卡住了。我想在另一个类库中配置Castle Windsor,我配置了,构建很好,没有错误,ok。。。但我在运行时遇到一个异常 Castle.MicroKernel.ComponentNotFoundException:未找到支持服务App.Web.UI.Controllers.HomeController的组件 当我将配置文件返回到同一程序集(App.Web.UI)时,我在运行时没有收到任何异常,工作正常 我尝试了很多方法,但都做不到。除此程序集外,是否还有其他绑定方法?还是解决方案 温莎城堡

我卡住了。我想在另一个类库中配置Castle Windsor,我配置了,构建很好,没有错误,ok。。。但我在运行时遇到一个异常

Castle.MicroKernel.ComponentNotFoundException:未找到支持服务App.Web.UI.Controllers.HomeController的组件

当我将配置文件返回到同一程序集(App.Web.UI)时,我在运行时没有收到任何异常,工作正常

我尝试了很多方法,但都做不到。除此程序集外,是否还有其他绑定方法?还是解决方案

温莎城堡的配置如下:

namespace App.Infrastructure.Configurations
{
    public class WindsorControllerFactory : DefaultControllerFactory
    {
        private readonly IKernel _kernel;

        public WindsorControllerFactory(IKernel kernel)
        {
            _kernel = kernel;
        }

        public override void ReleaseController(IController controller)
        {
            _kernel.ReleaseComponent(controller);
        }

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null)
            {
                throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
            }

            return (IController)_kernel.Resolve(controllerType);
        }
    }

    public class ControllersInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(Classes.FromThisAssembly().BasedOn<IController>().Unless(x => x.Name == "BaseController").LifestyleTransient());
        }
    }

    public class ServiceInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(
                Component.For(typeof (IRepository<>)).ImplementedBy(typeof (Repository<>)).LifestyleTransient(),
                Component.For<IUserService>().ImplementedBy<UserService>().LifestylePerWebRequest(),
                Component.For<IFormsAuthenticationService>().ImplementedBy<FormsAuthenticationService>().LifestylePerWebRequest(),
                Component.For<ILoggingService>().ImplementedBy<LoggingService>().LifestyleTransient(),
                Component.For<IFeedbackService>().ImplementedBy<FeedbackService>().LifestylePerWebRequest()
                ); 
        }
    }
}
namespace App.Infrastructure.Configurations
{
公共类WindsorController工厂:DefaultControllerFactory
{
私有只读IKernel_内核;
公共WindsorController工厂(IKernel内核)
{
_内核=内核;
}
公共覆盖无效释放控制器(IController控制器)
{
_内核释放组件(控制器);
}
受保护的重写IController GetControllerInstance(RequestContext RequestContext,类型controllerType)
{
如果(controllerType==null)
{
抛出新的HttpException(404,string.Format(“找不到路径“{0}”的控制器。”,requestContext.HttpContext.Request.path));
}
返回(IController)\内核解析(controllerType);
}
}
公共类控制器安装程序:IWindsorInstaller
{
public void安装(IWindsorContainer、IConfigurationStore)
{
container.Register(Classes.fromthissembly().BasedOn()。除非(x=>x.Name==“BaseController”).LifestyleTransient());
}
}
公共类ServiceInstaller:IWindsorInstaller
{
public void安装(IWindsorContainer、IConfigurationStore)
{
集装箱。登记(
组件。For(typeof(IRepository))。由(typeof(Repository)).LifestyleTransient()实现,
Component.For().ImplementedBy().LifestylePerWebRequest(),
Component.For().ImplementedBy().LifestylePerWebRequest(),
Component.For().ImplementedBy().LifestyleTransient(),
Component.For().ImplementedBy().LifestylePerWebRequest()实现
); 
}
}
}

在代码中,
类。FromThisAssembly()
引用包含Windsor内容的程序集,而不是web应用程序。尝试告诉Windsor注册特定部件中的组件。这应该起作用:

Classes.FromAssembly(Assembly.GetEntryAssembly())

入口程序集应该是运行MVC代码的AppDomain。

欢迎使用StackOverflow!如书面所述,你的问题很难理解。您是否可以让一位以英语为母语的同事与您一起回顾这篇文章?