나는 생성자 종속성 주입을 사용하는 서비스를 시작하는 API 컨트롤러가 있습니다. Windsor 컨테이너를 사용하여 종속성을 주입하고 싶습니다. 그러나 모범 사례는 확실하지 않습니다.API 컨트롤러의 Castle Windsor 컨테이너에서 해결
private readonly IWindsorContainer _container;
...
public IService Create(Type serviceType, ApiRequestModel apiRequest)
{
Arguments args = new Arguments(new { request = apiRequest });
return (IService)_container.Resolve(serviceType, args);
}
...
여기 API 컨트롤러의 일부 :
private readonly IWindsorContainer _container;
private readonly ServiceFactory _serviceFactory;
...
public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
Arguments args = new Arguments(new { serviceFactory = _serviceFactory });
IHttpController controller = (IHttpController)_container.Resolve(controllerType, args);
request.RegisterForDispose(new Release(() => _container.Release(controller)));
return controller;
}
...
여기에 서비스 공장의 일부 :
다음은 API 컨트롤러 공장의 일부
private ServiceFactory _serviceFactory { get; set; }
...
public object Post([FromBody]ApiRequestModel request)
{
...
Type serviceType = Assembly.Load("TestProject").GetType("TestClass");
IService instance = _serviceFactory.Create(serviceType, request);
...
_serviceFactory.Release(instance);
}
...
본 서비스 공장 Windsor 컨테이너의 인스턴스를 포함하므로 API 컨텍스트에 노출시키는 것은 좋지 않습니다. 올러? 그렇다면 가장 좋은 대안은 무엇입니까? 감사.