2011-12-22 4 views
0

Это, наверное, глупый вопрос! Я вынужден использовать Castle Windsor в качестве своего МОК, и у меня возникают проблемы с настройкой MVC. Вот что у меня есть.Неиспользование Замок Windsor Установщики со сборки

global.asax

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
     RegisterCastle(); 

    } 
    private void RegisterCastle() 
    { 
     _container = new WindsorContainer(); 
     _container.Install(FromAssembly.InDirectory(new AssemblyFilter(HttpRuntime.BinDirectory))); 
     ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(_container.Kernel)); 
    } 

Контроллер завод работает, но это о нем. У меня есть отдельный проект с моими установщиками, как и я, чтобы он загружал все инсталляторы из сборок в текущем веб-проекте (мне может что-то нужно знать).

Классы в проекте DI с использованием IWindsorInstaller вообще не загружаются. Я что-то упустил?

В Ninject мы могли бы использовать

kernel.Load(AppDomain.CurrentDomain.GetAssemblies()); 
+0

Ваши монтажники публику, параметр меньше конструктор по умолчанию? – PatrickSteele

+0

Да общедоступный класс MyInstaller: IWindsorInstaller –

+0

Итак, чтобы ответить на ваши вопросы, нет - похоже, что вы ничего не делаете неправильно. Не могли бы вы предоставить более подробную информацию о том, что не работает? – PatrickSteele

ответ

0

Я закончил с использованием WebActivator в App_Start

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Castle.Facilities.TypedFactory; 
using Castle.MicroKernel; 
using Castle.MicroKernel.Registration; 
using Castle.Windsor; 
using Castle.Windsor.Installer; 
using DFW.Domain.Interfaces; 
using UI.App_Start; 
using UI.Windsor; 

[assembly: WebActivator.PostApplicationStartMethod(typeof(Bootstrapper), "Wire")] 
[assembly: WebActivator.ApplicationShutdownMethod(typeof(Bootstrapper), "DeWire")] 

namespace UI.App_Start 
{ 
    public class Bootstrapper 
    { 
     private static readonly IWindsorContainer Container = new WindsorContainer(); 
     public static void Wire() 
     { 
      //To be able to inject IEnumerable<T> ICollection<T> IList<T> T[] use this: 
      //container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel, true)); 
      //Documentation http://docs.castleproject.org/Windsor.Resolvers.ashx 

      //To support typed factories add this: 
      Container.AddFacility<TypedFactoryFacility>(); 
      Container.Register(Component.For<IServiceFactory>().AsFactory().LifestyleTransient()); 
      //Documentation http://docs.castleproject.org/Windsor.Typed-Factory-Facility.ashx 

      Container.Install(FromAssembly.This()).Install(FromAssembly.Named("APP.Infrastructure.DependencyResolution")); 
      var controllerFactory = new WindsorControllerFactory(Container.Kernel); 
      ControllerBuilder.Current.SetControllerFactory(controllerFactory); 
     } 

     public static void DeWire() 
     { 
      Container.Dispose(); 
     } 
    } 
} 
Смежные вопросы