1

我最近将一个 2.5.2 项目更新为 3.2.1 / MVC 4,在修复了一些代码后重新编译了应用程序,我在运行时遇到了注册控制器问题。这是代码:

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

}

MissingMethod Exception 屏幕在执行后显示 IoC.Container.RegisterControllers(assembly.GetExportedTypes());

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

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

4

1 回答 1

0

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

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

并按照 Charleh 关于IWindsorInstaller的建议实施了一个解决方案 。基本上,我创建了一个 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());
于 2017-03-29T17:41:23.963 回答