0
아래는 Windsor Castle을 사용하여 인스턴스화하려는 컨트롤러의 코드입니다.Castle Windsor를 사용하여 MVC 5 웹 API 프로젝트에서 종속성 주입을 수행 할 수 없습니다.
public class TestController : ApiController
{
private ITestService _testService = null;
public TestController(ITestService testService)
{
_testService = testService;
}
public IList<TestClass> Get()
{
IList<TestClass> testObjects = _testService.GetAll().ToList();
return testObjects;
}
}
내가 Global.asax.cs에 다음 코드를 작성했습니다 여기에
protected void Application_Start()
{
........................
InitializeServiceLocator();
}
private static void InitializeServiceLocator()
{
_container = new WindsorContainer().Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(_container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
은>
이
public class ControllerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
if (store == null)
{
throw new ArgumentNullException("store");
}
//All MVC controllers
container.Register(Classes.FromThisAssembly().BasedOn<IHttpController>().LifestylePerWebRequest());
AddComponentsTo(container);
}
private void AddComponentsTo(IWindsorContainer container)
{
container.Register(
///DBContext
Component.For<DbContext>().ImplementedBy<SCFEntities>().LifestyleTransient());
container.Register(
Classes.FromAssemblyNamed("MyProject.ApplicationServices").Pick().WithService.DefaultInterfaces().LifestylePerWebRequest(),
Classes.FromAssemblyNamed("MyProject.Data").Pick().WithService.DefaultInterfaces().LifestylePerWebRequest());
}
}
이 문제는 컨트롤러 인스턴스가 만들어지지한다 = 설치 프로그램의 코드는 매개 변수화 된 생성자를 사용합니다. 그것은 매개 변수없는 생성자를 기대하고있다. 아무도 내가 잘못 가고있는 것을 지적 할 수 있습니까? 감사.
문제는 MVC 용 컨트롤러 팩토리를 등록했지만 웹 API가 다른 인터셉트 포인트를 가지고 있다는 것입니다. Web API DependencyResolver를 등록해야합니다. – Steven
당신은 @ Steven입니다. 도와 주셔서 감사합니다. –