на каждом, который проверяет контекст, чтобы сказать «использовать эту привязку [с этой областью], когда она входит в поставщика членства» и «использовать эту привязку [когда это не так]».
е я спрашивалаэтот вопрос, Ответ на который привел к другому вопросу, как ты видишь перед собой.
Начальная проблемаМоя проблема в том, что у меня есть кастомMembershipProvider
используяAccountRepository
используяObjectContext
, ПосколькуMembershipProvider
этоSingleton
в MVC (как я понимаю)AccountRepository
и этоObjectContext
должен быть введен один раз и оставаться там до концаMembershipProvider
время жизни.
Однако в моих контроллерах я также использую репозитории с контекстами объектов. В этих контроллерах мне нужно, чтобы контекст объекта был разделен между репозиториями с запросом. У меня есть следующая привязка:
Bind<IMyContext>().To<MyObjectContext>().InRequestScope();
// put bindings here
Bind<IAccountRepository>().To<EFAccountRepository>
и вApplication_Start()
kernel.Inject(Membership.Provider);
Проблема в том, что Ninject явно вызывает dispose для контекста объекта, когда считает, что запрос выполнен (думаю, через 30 секунд).
Мое (неработающее) решениеЯ заметил, что когда вы устанавливаете привязки, вы можете указать «при инъекции в». Проблема в том, что мне нужно «при инъекции при инъекции в». То естьпри введении контекст объектав контроллер аккаунтапри введении контроллер аккаунтав членство провайдера. И у меня, кажется, этого нет ...
Обходы, о которых я думал (но не очень люблю).Не вешайMyMembershipProvider
в MVC. Просто вставьте его экземпляр (позади и интерфейс) в контроллеры, которые нуждаются в этом, как я делаю с репозиториями. Затем Ninject создаст экземпляр провайдера для каждого запроса. Мне это не нравится, потому что я уверен, что у MVC есть причина для создания провайдера членства как синглтона.Найти событие, которое происходит каждый запрос и звонокkernel.Inject
снова в каждом событии. Повторная инициализация провайдера каждый запрос почти эквивалентна повторной реализации, за исключением более грязной.Создайте отдельное хранилище учетных записей для провайдера членства, к которому я могу привязаться другим способом. Кажется неправильным менять мою объектную модель из-за Ninject.ЗаключениеИМХО первый обходной путь самый лучший. Тем не менее, я скорее нахожу способ установить привязку Ninject так, как я хочу.
Что я должен делать?