Раньше мне удалось настроить мое единство, чтобы каждый раз предоставлять новый DataContext моему проекту Репозитория. Он отлично работает.Единство: использование одного и того же файла данных в application_BeginRequest?
Но, например, я использую метод WCF, который открывает 2 службы, которые, в свою очередь, открывают 2 репозитория (шаблон хранилища). Я надеялся, что смогу повторно использовать один и тот же файл данных в одном и том же методе wcf.
Так что я смотрел на RegisterInstance, но я проверяю GetHashCode для datacontext и каждый раз каждый раз. Я думал, что единство будет проверять контейнер для ребенка сначала каждый раз, когда я предполагаю, что у меня есть установка экземпляра - см. ниже
Вот мое единство, которое выполняется один раз!
container.RegisterType<MyDataContext>(new TransientLifetimeManager(),
new InjectionConstructor())
И тогда я попробовать и настроить в global.asax под Application_BeginRequest - но, возможно, это не идеально, как кажется ввести несколько раз .. даже при запуске службы ФОС, прежде чем кто-то вызывает метод ФОС
protected void Application_BeginRequest(object sender, EventArgs e)
{
Bootstrapper.ConfigureDataContextContainer();
}
А вот мой configureDataContextContainer
public static void ConfigureDataContextContainer()
{
if (childContainer == null) // I have to do this otherwise it executes multiple times.
{
childContainer = Bootstrapper.Container.CreateChildContainer();
childContainer.RegisterInstance<MyDataContext>
(container.Resolve<MyDataContext>()); // I Presume i create an instance here
}
}
Как я сказал в моем методе WCF я открываю 2 услуг, которые, в свою очередь, открывают «СВОЕ» Respository котором принимает s в DataContext - MyDataContext
Чтобы устранить проблему с BeginRequest, я мог бы зарегистрировать datacontext в качестве экземпляра (если он работал :-)) для каждого метода WCF, который у меня есть, но он кажется немного длинным.
Конечно, его очень импортировано, что каждое соединение (а не сеансы) получает свой собственный DataContext.
Я удалял datacontext, когда я удалял свой репозиторий ... теперь (если я могу заставить его работать), я полагаю, что мне нужно будет избавиться от этого в EndRequest .. в противном случае, если одна служба завершает и удаляет DataContext и другая служба не финишировали, тогда я собираюсь получить проблемы.
Я надеюсь, что я объяснил это хорошо, :-)
Резюме в том, что каждый метод WCF должен использовать свой собственный DataContext, метод Интернет может назвать более чем на 1 услугу (репозиторий шаблон), который в свою очередь, будем называть его репозиторий, который ожидает, что datacontext на constuctor, который объединяет регистры, - но в настоящее время, когда в одном и том же методе WCF несколько служб вызывают там репозитории, и они получают там собственный DataContext.
Если я могу уточнить что-нибудь, пожалуйста, дайте мне знать
Благодаря
EDIT
Забыла упомянуть, как я получаю единство разрешить вещи ...Я просто называю это на контейнер (не ребенок контейнер) на сервис, который в своей очереди вызывает respository
using (IOfficeService officeService = Bootstrapper.Container.Resolve<IOfficeService >())
{
Спасибо Майкла но «PerRequestLifetimeManager» собирается дать то же DataContext всего - то есть на каждый запрос, который приходит? Значит, разные клиенты, вызывающие разные методы wcf, получат один и тот же DataContext? –
Это означает, что в запросе будет возвращен тот же экземпляр. По сути, каждый запрос будет иметь собственный синглтон. Различные клиенты не будут использовать один и тот же экземпляр. –
Отлично, я сначала царапал себе голову, так как я не мог найти perRequestLifeTimeManager .. но мне удалось найти его в сети ... он отлично работает .. спасибо. –