Я работаю над этим (http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Five-Adding-logging-support.ashx) Учебник IoC в Castle Windsor, я прошел все предыдущие шаги и, как в предыдущем руководстве, я пытаюсь получить log4net регистратор впрыскивается в мой контроллер через свойство, как следующее:Замок Windsor IoC не вводит log4net в мой контроллер
public class HomeController : Controller
{
// this is Castle.Core.Logging.ILogger, not log4net.Core.ILogger
public ILogger Logger { get; set; }
public ActionResult Index()
{
Logger.Debug("Hello world");
ViewBag.Message = "Hello world";
return View();
}
}
, но, к сожалению, в точке исполнения Logger.Debug
Logger имеет нулевое значение, так что результаты с нулевым опорным исключением. Хотя, когда я пытаюсь позвонить
var logger = container.Resolve<ILogger>();
logger.Debug("Container bootstrapped");
внутри регистратора Global.asax полностью разрешен.
Почему Windsor не хочет разрешать зависимость внутри контроллера?
РЕДАКТИРОВАТЬ
Контроллер создается с помощью Windsor
Global.asax
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Castle.Core.Logging;
using Castle.Windsor;
using Castle.Windsor.Installer;
using FlightManagementSystem.WebPlatform.Configuration.IoC.Windsor.Factories;
namespace FlightManagementSystem.WebPlatform
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
private static IWindsorContainer container;
protected void Application_Start()
{
Debugger.Break();
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
container = new WindsorContainer();
container.Install(FromAssembly.This());
var controllerFactory = new ControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
protected void Application_End()
{
container.Dispose();
}
}
}
ControllerFactory.cs
using System;
using System.Web;
using System.Web.Mvc;
using Castle.MicroKernel;
namespace FlightManagementSystem.WebPlatform.Configuration.IoC.Windsor.Factories
{
public class ControllerFactory : DefaultControllerFactory
{
private readonly IKernel kernel;
public ControllerFactory(IKernel kernel)
{
this.kernel = kernel;
}
public override void ReleaseController(IController controller)
{
kernel.ReleaseComponent(controller);
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
throw new HttpException(404, String.Format(Resources.THE_CONTROLLER_FOR_PATH_0_COULD_NOT_BE_FOUND, requestContext.HttpContext.Request.Path));
}
return (IController) kernel.Resolve(controllerType);
}
}
}
ControllerInstaller.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using Castle.Windsor;
namespace FlightManagementSystem.WebPlatform.Configuration.IoC.Windsor.Installers
{
public class ControllerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register
(
Classes.FromThisAssembly()
.BasedOn<IController>()
.LifestyleTransient()
);
}
}
}
LoggerInstaller.cs
using Castle.Facilities.Logging;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using Castle.Windsor;
namespace FlightManagementSystem.WebPlatform.Configuration.Logger.log4net
{
public class LoggerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<LoggingFacility>(f => f.UseLog4Net());
}
}
}
Как вы создаете контроллер? –
Контроллер создан через Windsor, я отредактировал основной вопрос, вставил логику создания контроллера – Lu4
Вы добавили и настроили 'LoggingFacility'? –