나는 웹 서비스를 구현하는 ASP.NET MVC 2를 사용하고 있는데 나는 사용자 정의 JsonResult
클래스가 :Ninject를 사용하여 정적 속성을 주입하는 방법은 무엇입니까?
public abstract class JsonResult : ActionResult
{
public static ISerializer Serializer { get; set; }
public override void ExecuteResult(ControllerContext context)
{
var json = Serializer.Serialize(this);
context.HttpContext.Response.Write(json);
}
}
JsonResult
는 JSON 데이터로 직렬화해야 모든 결과에 대한 추상 기본 클래스입니다. 그것은 ISerializer
을 사용하여 직렬화를 수행합니다.
IoC 컨테이너로 Ninject를 사용하고 있습니다. 그러나, 나는 어떻게 내가 ISerializer
종속성을 주입해야하는지 잘 모르겠다. 나는 원래 이것을하고 있었다 :
var kernel = new StandardKernel().Bind<ISerializer>().To<JsonNetSerializer>();
JsonResult.Serializer = kernel.Get<ISerializer>();
그러나 그것에 관해 무엇인가 아주 올바르게 보이지 않는다. 그러면 Serializer
속성을 올바르게 주입하는 방법은 무엇입니까? 응용 프로그램이 시작될 때 한 번만 주입하고 싶습니다.
그래서 'Serializer'속성을 싱글 톤으로 유지하려면 항상 IoC 컨테이너를 사용하여'JsonResult'의 인스턴스를 인스턴스화해야합니다. –
@Daniel T .: 가능한 한 공장을 사용해야합니다. 그래서'ConcreteJsonResult'를 인스턴스화하는 클래스가 있다면'JsonResultFactory'를 취해야합니다. 물론'return kernel.Get();'의 라인을 따라'JsonResultFactory.Create '을 만들 수 있습니다. –
jason
Jason에게 감사드립니다. 나는 항상 공장을 만드는 것을 피했습니다. 왜냐하면 제 응용 프로그램이 너무 단순해서 공장을 사용하는 것이 불필요하게 복잡 해지는 것 같지만, 한번 시도해 보겠습니다. –