Я пытаюсь внедрить посмеянный экземпляр ISession (NHibernate) в структурную карту. В настоящее время все это связано с методом Bootstrap, но я хочу заменить тот, который вводится с издевательством. Я попробовал EjectAllInstancesOf, но он выкинул execption.StructureMap: Как заменить объект во время выполнения
[TestFixtureSetUp]
public void TestFixtureSetup()
{
Bootstrapper.Bootstrap();
//TODO: need to remove already wired up types that we are mocking.
var mockSession = MockRepository.GenerateStub<ISession>();
var mockLoggerFactory = MockRepository.GenerateStub<ILoggerFactory>();
ObjectFactory.EjectAllInstancesOf<ISession>();
ObjectFactory.EjectAllInstancesOf<ILoggerFactory>();
ObjectFactory.Inject<ISession>(mockSession);
ObjectFactory.Inject<ILoggerFactory>(mockLoggerFactory);
}
Ошибка:
System.NullReferenceException: Object reference not set to an instance of an object. at StructureMap.Pipeline.HttpContextLifecycle.findHttpDictionary() in c:\dev\opensource\structuremap\Source\StructureMap\Pipeline\HttpContextLifecycle.cs: line 50 at StructureMap.Pipeline.HttpContextLifecycle.FindCache() in c:\dev\opensource\structuremap\Source\StructureMap\Pipeline\HttpContextLifecycle.cs: line 28 at StructureMap.Pipeline.HttpContextLifecycle.EjectAll() in c:\dev\opensource\structuremap\Source\StructureMap\Pipeline\HttpContextLifecycle.cs: line 23 at StructureMap.Pipeline.HttpLifecycleBase`2.EjectAll() in c:\dev\opensource\structuremap\Source\StructureMap\Pipeline\HttpLifecycleBase.cs: line 18 at StructureMap.InstanceFactory.EjectAllInstances() in c:\dev\opensource\structuremap\Source\StructureMap\InstanceFactory.cs: line 127 at StructureMap.PipelineGraph.EjectAllInstancesOf() in c:\dev\opensource\structuremap\Source\StructureMap\PipelineGraph.cs: line 193 at StructureMap.Container.EjectAllInstancesOf() in c:\dev\opensource\structuremap\Source\StructureMap\Container.cs: line 393 at StructureMap.ObjectFactory.EjectAllInstancesOf() in c:\dev\opensource\structuremap\Source\StructureMap\ObjectFactory.cs: line 277
Это не так, на самом деле это два экземпляра, один из которых был авто-проводным, а другой - макет. Кажется, это проблема только с ISession и тем, как она подключена, потому что я могу изгнать все остальные типы. Я закончил тем, что выбрасывал все репозитории и заменял их чужими. См. Обновление – epitka