Я использую Castle Windsor 3.0, и он отлично работал для меня, пока я не попытался зарегистрировать контроллеры (я использовал WCF и IoC для уровня хранилища / обслуживания). Вот мой класс установщика контроллеров:
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
RegisterAllBasedOnWithCustomComponentRegistration(container, typeof(IController),
typeof(HomeController).Assembly,
cr => cr.LifeStyle.Transient);
}
private void RegisterAllBasedOnWithCustomComponentRegistration(IWindsorContainer container, Type baseType,
Assembly assemblyWithImplementations, Func<ComponentRegistration, ComponentRegistration<object>> customComponentRegistrationCb)
{
container.Register(
AllTypes.FromAssembly(assemblyWithImplementations)
.BasedOn(baseType)
.If(t => t.Name.EndsWith("Controller"))
.Configure(c => customComponentRegistrationCb(c)));
}
}
А вот мой контроллер фабрики:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel;
public WindsorControllerFactory(IKernel kernel)
{
_kernel = kernel;
}
public override void ReleaseController(IController controller)
{
_kernel.ReleaseComponent(controller);
}
public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
var controllerComponentName = controllerName + "Controller";
return _kernel.Resolve<IController>(controllerComponentName);
}
}
Из моего global.asax я вызываю следующий метод:
InversionOfControl.InstallControllers (FromAssembly.This ());
который лежит в другом проекте. И там я называю код установки:
public static void InstallControllers(IWindsorInstaller install)
{
_container.Install(install);
}
мне кажется, что я делаю что-то не так, и я надеюсь, что это так, потому что это может быть моментом "никогда больше не используй бета-версию".
Я получаю следующее исключение: Не найден компонент для поддержки службы System.Web.Mvc.IController Хотя я вижу, что контроллер в режиме отладки зарегистрирован в контейнере