У меня есть службы WCF, из которого мне нужно войти вызовы его методов. Для этого я использовал решение this, чтобы иметь возможность отслеживать вызовы и вызывать мою службу внутреннего аудита, которая использует Entity 5.1 и внедряет службы/репозитории/DbContext с помощью Ninject.WCF с помощью IOperationInvoker Субъекта и Ninject
методMy 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();
Проблема возникает, когда внутри Repository, я называю dbContext, чтобы добавить новый объект Audit следующим образом:
_dbContext.Set<T>().Add(entity);
Это ошибка, требуя, чтобы tha t DbContext был удален.
Что бы правильный способ регистрации DbContext на службе WCF, так что регистрируется для IOperationInvoker ??
Я должен отметить, что у меня есть все это заявление, то же самое для основного сайта я подающий с этим бэкэндом в MVC4 и она отлично работает (нет WCF там). Поэтому я почти уверен, что что-то нужно исправить для цикла жизненного цикла WCF, но не настолько уверенно в чем.
То, как я зарегистрировался, отлично работает для веб-методов. Проблема оказалась связанной с жизненным циклом OperationInvoker и других расширений. Перемещая вызов в AuditService должным образом из одного места в другое, это делало магию, и все работало как шарм. Спасибо в любом случае! – CesarD