Структура карты Утилизация объекта DataContext - PullRequest
7 голосов
/ 16 февраля 2011

Я хотел быть уверен, что structmap будет располагать моим DataContext после окончания каждого запроса.

Вот мои настройки

ForRequestedType<MyDataContext>().TheDefault.Is.OfConcreteType<MyDataContext>();
SelectConstructor<MyDataContext>(() => new MyDataContext());

Будет ли structmap автоматически удалять мой текстовый текст или мне нужно вызвать Dispose вручную ??

Ответы [ 2 ]

9 голосов
/ 16 февраля 2011

Вот что я делаю:

    For<IUnitOfWork>()
        .HybridHttpOrThreadLocalScoped()
        .Use<BpReminders.Data.NH.UnitOfWork>();

    For<ISession>()
        .HybridHttpOrThreadLocalScoped()
        .Use(o => ((BpReminders.Data.NH.UnitOfWork)o.GetInstance<IUnitOfWork>()).CurrentSession);

и ...

protected void Application_EndRequest(object sender, EventArgs e)
{
    ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}

HybridHttpOrThreadLocalScoped использует HttpContext , когда доступно.

StructureMap заботится обо всем, а затем.Просто не забудьте реализовать IDisposable в ваших классах.

4 голосов
/ 16 февраля 2011

Нет, он не будет утилизироваться автоматически, если вы не используете вложенные контейнеры и не утилизируете контейнер, содержащий экземпляр контекста. Это зависит от создателя контекста, чтобы избавиться от него. Создатель обычно является частью вашего кода, вызывающей ObjectContext.GetInstance<MyDataContext>, или корневым методом, который заставляет StructureMap внедрить DataContext в один из ваших объектов.

Обычной практикой является создание контекста для HttpRequest и удаление контекста в конце запроса.

...