【发布时间】:2016-10-10 16:31:29
【问题描述】:
我正在我的 WebAPI 应用程序的业务层中进行 PostAsync 调用。
使用 AutoFac 我正在设置我的绑定,如下所示:
builder.RegisterGeneric(typeof(SqlServerRepository<>))
.As(typeof(IRepository<>))
.InstancePerLifetimeScope();
builder.RegisterType<WspSQLDbContext>()
.As<DbContext>()
.InstancePerLifetimeScope();
存储库被注入到控制器中:
public KenSciConnector(log4net.ILog logger, IRepository<KenSciBatch> kensciBatchRepository) {
_logger = logger;
_kensciBatchRepository = kensciBatchRepository;
}
调用异步函数的函数如下所示:
public Response SendToVendor(Observation observation) {
Response batchingResponse;
// some logic
var sendResponse = SendToKensci(requestObject, batch);
return batchingResponse;
}
...实际上使异步调用的函数如下所示:
private async Task<Response> SendToKensci(KenSciRequest requestObject, KenSciBatch kenSciBatch) {
var response = new Response();
try {
var httpClient = new HttpClient();
await httpClient
.PostAsync(httpClient.BaseAddress, new StringContent(seralizedObject, Encoding.UTF8, "application/json"))
.ContinueWith((requestTask) => UpdateBatch(requestTask, kenSciBatch));
} catch (Exception e) {
// some logic
return response;
}
// some logic
return response;
}
在我尝试更新的回调函数中,我得到一个异常,DbContext 已被释放。
private void UpdateBatch(Task<HttpResponseMessage> requestTask, KenSciBatch kenSciBatch) {
try {
if (requestTask.Result.StatusCode == HttpStatusCode.OK) {
kenSciBatch.Status = BatchStatus.Sent;
_kensciBatchRepository.Update(kenSciBatch);
}
} catch (Exception ex) {
throw ex;
}
}
【问题讨论】:
-
是的,这就是问题所在。 put 是一个答案。
标签: c# dependency-injection async-await asp.net-web-api2 autofac