Могу ли я указать область действия в Ninject только для этой конкретной ситуации ?

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

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

Моя проблема в том, что у меня есть собственный MembershipProvider , использующий AccountRepository с использованием ObjectContext . Поскольку MembershipProvider является Singleton в MVC (насколько я понимаю), AccountRepository и его ObjectContext должны быть введены один раз и оставаться там на оставшееся время жизни MembershipProvider .

Однако в своих контроллерах я также использую репозитории с контекстами объектов. В этих контроллерах мне нужно, чтобы контекст объекта был разделен между репозиториями с помощью запроса. Имею такую ​​привязку:

Bind().To().InRequestScope();
// put bindings here
Bind().To

и в Application_Start ()

kernel.Inject(Membership.Provider);

Проблема в том, что Ninject явно вызывает dispose в контексте объекта, когда думает, что запрос выполнен (я думаю, через 30 секунд).

My (не работает) ) solution

Я заметил, что когда вы устанавливаете привязки, вы можете указать «при инъекции в». Проблема в том, что мне нужно "при вливании при вливании". То есть при внедрении контекста объекта в контроллер учетных записей при внедрении контроллера учетных записей в поставщика членства. И, похоже, у меня этого нет ...

Обходы, которые я придумал (но мне не очень нравится).

  1. Не вешайте MyMembershipProvider в MVC. Просто передайте его (позади и интерфейс) контроллерам, которые в нем нуждаются, как я делаю с репозиториями. Затем Ninject будет создавать экземпляр провайдера для каждого запроса. Мне это не нравится, потому что я уверен, что у MVC есть причина для создания экземпляра поставщика членства как синглтона.
  2. Найдите событие, которое происходит при каждом запросе, и вызовите kernel.Inject снова в каждом событии. Повторная инициализация поставщика при каждом запросе почти эквивалентна повторному созданию экземпляра, за исключением более грязного.
  3. Создайте отдельный репозиторий учетных записей для поставщика членства, к которому я могу привязаться другим способом. Мне кажется неправильным изменять мою объектную модель из-за Ninject.

Заключение

ИМХО, первый обходной путь - лучший. Тем не менее, я предпочитаю найти способ настроить Ninject для привязки так, как я хочу. cd "/ Users / c28 / Documents / Office Projects / Nice Saying123" setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/...

CodeSign "build/Release-iphoneos/Nice Saying123.app"
cd "/Users/c28/Documents/Office Projects/Nice Saying123"
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
setenv _CODESIGN_ALLOCATE_ /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
/usr/bin/codesign -f -s "iPhone Developer: dipak kasabwala (29QJU3WV6X)" "--resource-rules=/Users/c28/Documents/Office Projects/Nice Saying123/build/Release-iphoneos/Nice Saying123.app/ResourceRules.plist" --entitlements "/Users/c28/Documents/Office Projects/Nice Saying123/build/Nice Saying123.build/Release-iphoneos/Nice Saying123.build/Nice Saying123.xcent" "/Users/c28/Documents/Office Projects/Nice Saying123/build/Release-iphoneos/Nice Saying123.app"

/Users/c28/Documents/Office Projects/Nice Saying123/build/Release-iphoneos/Nice Saying123.app: replacing invalid existing signature
/Users/c28/Documents/Office Projects/Nice Saying123/build/Release-iphoneos/Nice Saying123.app: CSSMERR_TP_NOT_TRUSTED
Command /usr/bin/codesign failed with exit code 1

5
задан Nate 28 February 2013 в 22:35
поделиться