다음과 같은 설정을 사용하면 세 가지 어셈블리가 있습니다.ASP.NET MVC에서 Castle.Windsor에 컨트롤러를 추가 할 수 없습니다
웹 (ASP.NET MVC 3.0 RC1)
모델
지속성 (유창함 NHibernate에, Castle.Windsor)
이 내 ControllerInstaller입니다.
using System;
using System.Web.Mvc;
using Castle;
using Castle.Windsor;
using Castle.MicroKernel;
using Castle.MicroKernel.SubSystems;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
namespace Persistence.Installers
{
public class ControllerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
AllTypes
.FromAssembly(System.Reflection.Assembly.GetExecutingAssembly())
.BasedOn<IController>()
.Configure(c => c.Named(
c.Implementation.Name.ToLowerInvariant()).LifeStyle.Transient));
}
}
}
이
은protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
// Register the Windsor Container
ControllerBuilder.Current
.SetControllerFactory(typeof(Persistence.Containers.WindsorControllerFactory));
}
내가 오류
없음을 얻고있다 ... 이것은
global.asax
파일 내Application_Start
입니다using System; using System.Web; using System.Web.Mvc; namespace Persistence.Containers { /// <summary> /// Utilize Castle.Windsor to provide Dependency Injection for the Controller Factory /// </summary> public class WindsorControllerFactory : DefaultControllerFactory { private readonly Castle.Windsor.IWindsorContainer container; public WindsorControllerFactory() { container = WindsorContainerFactory.Current(); } protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { return (IController)container.Resolve(controllerType); } } }
... 내 ControllerFactory입니다 프로 서비스를 지원하는 구성 요소 ject.Web.Controllers.HomeController를 찾았습니다
GetControllerInstance
에 있습니다.
그래서 내가 뭘 잘못하고 있는지, 왜 컨트롤러를 등록 할 수 없는지 잘 모르겠습니다.
그래서 "FromAssemblyNamed ('nameofWeb.dll')"라고 말하면서 같은 결과를 얻을 수 없습니까? 그런 식으로 일할 특별한 이유가 있습니까? – Ciel
@ Stacey : 내가 [여기] (http://stackoverflow.com/questions/4401244/castle-windsor-ioc-in-an-mvc-application/4402870#4402870)라고 쓴 것처럼, IoC 컨테이너 그것은 지속 레이어와 관련이 없습니다. 지속성 계층은 종종 다른 응용 프로그램간에 공유되지만 지속성 계층은 응용 프로그램이 가질 수있는 다른 모든 종속성을 인식하면 안됩니다. – cspolton
코드를 기술적으로 "FromAssemblyNamed ("Web ")로 변경하여 작동시킬 수는 있지만 솔루션에 코드를 배치하는 최선의 방법을 이해하는 데 도움이되지 않습니다. – cspolton