콘솔 응용 프로그램에서 현재 생성자에 전달할 현재 http 컨텍스트가 필요한 서비스를 사용하고 싶습니다. 나는 Ninject를 사용하고 있으며, 단순히 HTTP 컨텍스트를 가짜로 만들고 적절한 바인딩을 정의 할 수 있다고 생각하지만, 성공하지 못하면서 몇 시간 동안이 작업에 어려움을 겪어 왔습니다.HttpContext와 HttpRequest를 가짜로 만들어 서비스 생성자에 삽입하는 방법
세부 사항 :
서비스는 실제로 ASP.Net MVC 프로젝트에서 오는 메일 링 서비스입니다. 나는 또한 IoC를 위해 Ninject를 사용하고있다. 메일 서비스는 생성자에 전달할 현재 http 컨텍스트를 필요로합니다.
kernel.Bind<IMyEmailService>().To<MyEmailService>()
.WithConstructorArgument("httpContext", ninjectContext => new HttpContextWrapper(HttpContext.Current));
그러나, 나는 밤에 자동화 된 작업을 실행하는 데 사용되는 콘솔 응용 프로그램에서이 메일 링 서비스를 사용하기 위해 지금하고자 다음과 같이 나는 바인딩 않습니다. 이렇게하기 위해서, 나는 단순히 http 컨텍스트를 가짜로 만들 수 있다고 생각하지만, 나는 이것으로 몇 시간 동안 고심하고있다. 컨텍스트에서
모든 메일 링 서비스 요구는이 두 가지 속성은 다음과 같습니다
- httpContext.Request.UserHostAddress
- httpContext.Request.RawUrl
나는 같은 것을 할 수 있다고 생각 그러나 :
가짜 요청 클래스 정의 :
이 밖으로 작동하지 않는 경우,kernel.Bind<IUpDirEmailService>().To<UpDirEmailService>()
.WithConstructorArgument("httpContext", ninjectContext => new AutomatedTasksHttpContext());
을 불행하게도 :
public class AutomatedTasksHttpContext
{
public AutomatedTaskHttpRequest Request;
public AutomatedTasksHttpContext()
{
this.Request = new AutomatedTaskHttpRequest("", "", "", null, new StringWriter());
}
}
을 내 콘솔 응용 프로그램에서 다음과 같이 바인딩 : 0
public class AutomatedTaskHttpRequest : SimpleWorkerRequest
{
public string UserHostAddress;
public string RawUrl;
public AutomatedTaskHttpRequest(string appVirtualDir, string appPhysicalDir, string page, string query, TextWriter output)
: base(appVirtualDir, appPhysicalDir, page, query, output)
{
this.UserHostAddress = "127.0.0.1";
this.RawUrl = null;
}
}
내 자신의 상황에 맞는 클래스를 정의합니다. 나는 다양한 변종을 시도했지만 아무도 일하고 있지 않았다. 나와 함께 견뎌주세요. IoC의 모든 것들은 나에게 새롭다.
나는 모의가 시험용. 여기서는 내가 개발하고있는 테스트 장치는 아니지만 실제 콘솔 응용 프로그램입니다. 또한, Ninject와 함께 공장을 사용하는 방법을 잘 모르겠습니다. 실제 컨텍스트 대신 서비스 생성자에 전달할 컨텍스트 팩터 리입니까? –