文章告诉你如何配置windsor。但它没有告诉你的是你必须配置你的容器。
要让 windsor 能够解决您的 ICommon commonService,您需要告诉它必须如何解决。
有几种方法可以做到这一点。以下只是我如何在一个项目中使用它的一个示例。
希望它可以帮助你。
汉斯
public class WebInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For(typeof(ICommon)).ImplementedBy(typeof(CommonService)).LifestyleTransient());
}
}
public static class DependencyInjection
{
private static IWindsorContainer container;
private static readonly object padlock = new object();
public static IWindsorContainer Container
{
get
{
lock (padlock)
{
if (container == null)
{
InitializeDependencyInjection();
}
return container;
}
}
}
private static void InitializeDependencyInjection()
{
container = new WindsorContainer();
container.AddFacility<FactorySupportFacility>();
container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel));
container.Install(new Core.Installers.WebInstaller());
// Wiring up DI for the SOLR integration
//new WindsorSolrStartUp(container).Initialize();
}
/// <summary>
/// http://www.superstarcoders.com/blogs/posts/using-castle-windsor-with-sitecore-mvc-for-dependency-injection.aspx
/// </summary>
public static void SetupControllerFactory()
{
Container.Install(FromAssembly.This());
// Transient needed for sitecore running multiple instances of a controller for controller renderings
Container.Register(Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient());
IControllerFactory controllerFactory = new WindsorControllerFactory(Container);
var scapiSitecoreControllerFactory = new SitecoreControllerFactory(controllerFactory);
ControllerBuilder.Current.SetControllerFactory(scapiSitecoreControllerFactory);
}
}
public class InitializeWindsorControllerFactory
{
public virtual void Process(PipelineArgs args)
{
DependencyInjection.SetupControllerFactory();
}
}