2010-09-28 5 views
1

Я адаптирую код, первоначально написанный для Виндзора, для использования StructureMap. В примере Windsor мы освобождаем обработчик. Нужно ли это делать с экземплярами StructureMap, которые кэшируются «за запрос»? Код:Нужно ли удалять экземпляры StructureMap "per request"?

 foreach (var handler in ObjectFactory.GetAllInstances<IHandle<TEvent>>()) { 
      handler.Handle(@event); 
      // do I need to dispose here? 
     } 
     // or should I do this: 
     ObjectFactory.EjectAllInstancesOf<IHandle<TEvent>>(); 

Благодаря Бен

ответ

3

StructureMap не держит на ссылки на «предварительно запрос» экземпляров на всех, так что вы не должны предпринимать никаких шагов, чтобы сказать StructureMap, чтобы освободить их.

Однако, если извлеченные службы ожидают, что они будут явно удалены (поскольку они реализуют IDisposable), вы по-прежнему несете ответственность за их использование. StructureMap просто дает вам экземпляр, и вы можете использовать его соответствующим образом.

С одним исключением - если вы извлечь IDisposable экземпляр из контейнера вложенная, Dispose() будет называться на экземпляре, когда вложенный контейнер расположен.

Смежные вопросы