на каждом, который проверяет контекст, чтобы сказать «использовать эту привязку [с этой областью], когда она входит в поставщика членства» и «использовать эту привязку [когда это не так]».

е я спрашивалаэтот вопрос, Ответ на который привел к другому вопросу, как ты видишь перед собой.

Начальная проблема

Моя проблема в том, что у меня есть кастом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 так, как я хочу.

Что я должен делать?

Ответы на вопрос(1)

Ваш ответ на вопрос