我最近更新了一个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());
"Method not found: 'Castle.Windsor.IWindsorContainer Castle.Windsor.IWindsorContainer.AddComponentLifeStyle(System.String, System.Type, Castle.Core.LifestyleType)'."
指出我正确的方向会很有帮助
答案 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());