IWindsorContainer RegisterControllers缺少方法AddLifestyle错误

时间:2013-09-18 15:54:18

标签: asp.net-mvc-4 castle-windsor

我最近更新了一个2.5.2项目到3.2.1 / MVC 4,在几次代码修复后重新编译应用程序,我在运行时遇到了一个Register Controller问题。这是代码:

    public static void Register(string key, Type interfaceType, Type implementationType)
    {
        //IoC.Container.AddComponent(key, interfaceType, implementationType);
        // IoC.Container.AddComponent is obsolete. Replaced by:
        IoC.Container.Register(Component.For(interfaceType).ImplementedBy(implementationType).Named(key));
    }

    public static void RegisterControllers(params Assembly[] assemblies)
    {
        //IoC.Container.RegisterControllers(assemblies);

        foreach (Assembly assembly in assemblies)
        {
            IoC.Container.RegisterControllers(assembly.GetExportedTypes());
        }
    }

    public static void RegisterAllFromAssemblies(string baseAssembly, string relatedAssembly)
    {
        // AllTypes is obsolete
        //
        //IoC.Container.Register(AllTypes.
        //    FromAssemblyNamed(baseAssembly).
        //    WithService.
        //    FirstNonGenericCoreInterface(relatedAssembly));

        //Update for Castle-Windor 3.2
        IoC.Container.Register(Classes.FromAssemblyNamed(baseAssembly)
                .Pick().WithServiceFirstInterface()
                .LifestylePerWebRequest());
    }
}

}

执行IoC.Container.RegisterControllers(assembly.GetExportedTypes());

后会显示MissingMethod Exception屏幕

"Method not found: 'Castle.Windsor.IWindsorContainer Castle.Windsor.IWindsorContainer.AddComponentLifeStyle(System.String, System.Type, Castle.Core.LifestyleType)'."

指出我正确的方向会很有帮助

1 个答案:

答案 0 :(得分:0)

我发现这个悬而未决的问题同时将SharpArch 1.6的Sharp Architecture项目升级到SharpArch 3.0,并认为最终的答案可能有用。

我遇到了同样的问题
  

"找不到方法:' Castle.Windsor.IWindsorContainer   Castle.Windsor.IWindsorContainer.AddComponentLifeStyle(System.String,   System.Type,Castle.Core.LifestyleType)'。"

并根据IWindsorInstaller的建议实现了解决方案 Charleh。 基本上,我创建了一个IWindsorInstaller实现,移动那里所有我需要的IoC依赖注册

public class ComponentsInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
    {
        AddApplicationServicesTo(container);
        //eventually other services to install
    }

private void AddApplicationServicesTo(IWindsorContainer container)
{

    container.Register(Classes.FromAssemblyNamed("myAssemblyName1").Pick().WithService.FirstInterface());

    container.Register(Classes.FromAssemblyNamed("myAssemblyName2").Pick().WithService.FirstInterface());

}
}

并使用

从Global.asax Application_Start调用该安装程序
    IWindsorContainer container = new WindsorContainer();
    container.Install(FromAssembly.This());