gpt4 book ai didi

c# - 如何使用 CaSTLe Windsor 与 mvc web 应用程序不同的程序集?

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:55 26 4
gpt4 key购买 nike

我卡住了。我想在不同的类库中配置 CaSTLe Windsor 并且我配置了,构建很好,没有错误,好的......但我在运行时遇到异常。

Castle.MicroKernel.ComponentNotFoundException: No component for supporting the service App.Web.UI.Controllers.HomeController was found

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

我尝试了很多方法,但我做不到。除了 FromThisAssembly,还有其他绑定(bind)方法吗?还是解决方案?

温莎城堡配置在这里:

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

最佳答案

在您的代码中,Classes.FromThisAssembly() 引用包含您的 Windsor 内容的程序集——而不是您的 Web 应用程序。尝试告诉 Windsor 从特定程序集中注册组件。这应该有效:

Classes.FromAssembly(Assembly.GetEntryAssembly())

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

关于c# - 如何使用 CaSTLe Windsor 与 mvc web 应用程序不同的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27827603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com