我有一个 WCF 服务,我需要从中记录对其方法的调用。为此,我使用此解决方案来跟踪调用并调用我的内部审计服务,该服务使用 Entity 5.1 并使用 Ninject 注入服务/存储库/DbContext。
我的 Invoke 方法如下所示:
public object Invoke(object instance, object[] inputs, out object[] outputs)
{
var methodParams = (instance).GetType().GetMethod(_operationName).GetParameters();
var parameters = new Dictionary<string, object>();
for (var index = 0; index < inputs.Length; index++)
parameters.Add(methodParams[index].Name, inputs[index]);
_auditService.TrackFilterParametersValues(_operation.Parent.Type.FullName, _operationName, _operation.Action, parameters);
return _baseInvoker.Invoke(instance, inputs, out outputs);
}
在我的 Ninject 模块中,我有这样注册的内部内容:
Bind<IAuditService>().To<AuditeService>().InRequestScope();
Bind(typeof(IRepository<>)).To(typeof(Repository<>)).InRequestScope();
Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
Bind<DbContext>().To<MyEntities>().InRequestScope();
当我在存储库中调用 dbContext 来添加新的 Audit 对象时,就会出现问题,如下所示:
_dbContext.Set<T>().Add(entity);
它错误地声称 DbContext 已被处置。
在 WCF 服务上注册 DbContext 以便为 IOperationInvoker 注册的正确方法是什么?
我不得不提一下,对于我在 MVC4 中厌倦了这个后端的主站点,我的所有这些声明都是相同的,它工作得很好(那里没有 WCF)。所以我很确定需要为 WCF 生命周期更正一些东西,但不太确定是什么。