2015-01-07 3 views
2

Я застрял. Я хочу настроить Castle Windsor в другой библиотеке классов, и я настроил, сборка в порядке, без ошибок, нормально ... Но во время выполнения я получаю исключение.Как использовать Castle Windsor другую сборку из веб-приложения mvc?

Castle.MicroKernel.ComponentNotFoundException: Нет компонент для поддержки App.Web.UI.Controllers.HomeController службы был найден

Когда я получаю файл конфигурационный обратно в той же сборке (App.Web .UI), я не получаю исключения во время выполнения, работа прекрасна.

Я пробовал много способов, но я не мог. Есть ли другой метод связывания, кроме FromThisAssembly? Или решение?

конфигурации Замок Виндзор находится здесь:

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

Добро пожаловать в StackOverflow! Как написано, ваш вопрос трудно понять. Возможно ли, чтобы вы с коллегой, который является носителем английского языка, рассматривали это с вами? –

ответ

2

В своем коде, то Classes.FromThisAssembly() ссылается на сборку, содержащую ваш Виндзорский материал - не ваше веб-приложение. Попробуйте Windsor зарегистрировать компоненты из определенной сборки. Это должно сработать:

Classes.FromAssembly(Assembly.GetEntryAssembly()) 

Вклад в сборке должен быть в AppDomain с кодом MVC.

Смежные вопросы