2015-02-02 3 views
1

В прошлом у меня был большой опыт работы с Umbraco 6 и Windsor Castle в качестве IoC. После более чем одного года, не работающего с Umbraco, я подумал, что посмотрим, что у меня есть в магазине (мне нравится backoffice!)Windsor IoC с Umbraco 7.2.1

После создания нового проекта и использования NuGet для установки Umbraco 7.2.1 я решил реализовать замок Виндзор по моему опыту в прошлом.

После установки IoC и настройки installconfig мой backoffice больше не загружается! См. Следующую ошибку:

 

    Castle.MicroKernel.ComponentNotFoundException was unhandled by user code 
    HelpLink=groups.google.com/group/castle-project-users 
    HResult=-2146233088 
    Message=No component for supporting the service Umbraco.Web.Editors.AuthenticationController was found 
    Source=Castle.Windsor 
    StackTrace: 
      at Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(Type service, IDictionary arguments, IReleasePolicy policy) 
      at Castle.MicroKernel.DefaultKernel.Resolve(Type service, IDictionary arguments) 
      at Castle.Windsor.WindsorContainer.Resolve(Type service) 
      at Project.Composition.ObjectFactory.Resolve(Type type) in c:\Repositories\Project\1. Code\Project\Composition\ObjectFactory.cs:regel 24 
      at Project.Web.Composition.WindsorCompositionRoot.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) in c:\Repositories\Project\1. Code\Project.web\Composition\WindsorCompositionRoot.cs:regel 22 
      at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) 
      at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage request, CancellationToken cancellationToken) 
      at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    InnerException: null 

Я просто не могу понять, что происходит или в чем проблема. У меня это есть только при загрузке backoffice. Он сбой уже на экране inlog. Я уже пробовал несколько вещей: Umbraco MVC with Castle Windsor https://gist.github.com/florisrobbemont/5821863 Но я просто не могу понять это.

редактировать 04-02-2015 ---->

Это https://gist.github.com/florisrobbemont/5821863 более или менее то, что я! Что вы хотите увидеть больше? Мой web.config установщики?

Это мой загрузочный класс:

public class UmbracoBoot : IApplicationEventHandler 
    { 
     internal static IWindsorContainer Container; 

     public void OnApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { 
      umbracoApplication.Disposed += umbracoApplication_Disposed; 
     } 

     void umbracoApplication_Disposed(object sender, System.EventArgs e) 
     { 
      Application.Stop(); 
     } 

     protected void ApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { 
      Container = new WindsorContainer() 
       .Install(Configuration.FromAppConfig()) 
       .Register(Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient()); 

      FilteredControllerFactoriesResolver.Current.InsertType<UmbracoFilteredControllerFactory>(0); 
     } 

     public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { 
      RouteConfig.Register(); 
      FilterConfig.Register(); 
      BundleConfig.Register(); 
     } 

     public void OnApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { 
      Application.Create(); 
      FilteredControllerFactoriesResolver.Current.InsertType<UmbracoFilteredControllerFactory>(0); 
      DependencyResolver.SetResolver(new WindsorDependencyResolver(Application.ObjectFactory)); 
      GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new WindsorCompositionRoot(Application.ObjectFactory)); 

      Application.Start(); 
     } 
    } 
+0

«настройка installconfig» Не могли бы вы уточнить? Покажите нам код/​​config? Проблема в том, что Castle Windsor не находит регистрацию, поэтому я предполагаю, что, возможно, вы не настраиваете все компоненты. – samy

+0

Я добавил свой класс загрузки, вам нужно что-то еще? Я в основном использовал эту ссылку https://gist.github.com/florisrobbemont/5821863 – Melvin

+0

Также, когда я перехожу на страницу, я как дома или что-то еще, IoC работает как шарм, но когда я перехожу к/umbraco/он падает ! – Melvin

ответ

0

Я могу ошибаться, но мне кажется, что вы устанавливаете весь контроллер от вашего приложения с этой линией:

.Register(Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient()); 

но ваш Umbraco .Web.Editors.AuthenticationController, вероятно, находится в другой сборке. Попробуйте зарегистрировать его явно, или если вам нужно зарегистрировать весь контроллер из этой сборки, используя Classes.FromAssemblyContaining (может быть ошибочно принято точное имя функции).

Goodluck, Marwijn.

0

У меня была аналогичная проблема, и использовать технику, описанную для StructureMap здесь http://www.wearesicc.com/getting-started-with-umbraco-7-and-structuremap-v3/

Я отрегулировать свой класс WindsorCompositionRoot Создать метод, чтобы проверить, если запрос на контроллер Umbraco, и если да, то пусть Umbraco решимость Это. Метод теперь выглядит так:

 
     public IHttpController Create(HttpRequestMessage request, 
             HttpControllerDescriptor controllerDescriptor, 
             Type controllerType) 
     { 
      if (ControllersHelper.IsUmbracoController(controllerType)) 
      { 
       return Activator.CreateInstance(controllerType) as IHttpController; 
      } 

      var controller = (IHttpController)_container.Kernel.Resolve(controllerType); 

      request.RegisterForDispose(new Release(() => _container.Kernel.ReleaseComponent(controller))); 

      return controller; 
     } 

используя метод IsUmbracoController из связанного сообщения.

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