Autofac FactoryScoped Linq для контекста данных SQL - PullRequest
2 голосов
/ 14 апреля 2011

Что означает FactoryScoped регистрация в контексте данных Linq to SQL? Кто заботится об утилизации?

Вот код, который я видел. Я предполагаю, что для приложения ASP.NET FactoryScoped не рекомендуется для контекста данных?

builder.Register(c => new MyDataContext("connectionString"))
       .As<MyDataContext>()
       .FactoryScoped();

1 Ответ

5 голосов
/ 15 апреля 2011

FactoryScoped в 1.x переименован в 2.x в InstancePerDependency, что лучше описывает эффект.Это означает, что Autofac будет обслуживать новый экземпляр каждый раз, когда сервис вводится.В вашем случае новый контекст данных будет создан после внедрения.

Autofac по-прежнему позаботится об утилизации, но в этом и заключается ловушка.Каждый экземпляр MyDataContext будет отслеживаться в текущей области действия и, следовательно, не будет освобожден до тех пор, пока область не будет освобождена.

Чтобы самостоятельно контролировать удаление, вы можете пометить регистрациюс ExternallyOwned.Вы также можете посмотреть на тип Owned<>.Читайте о детерминированной ликвидации и принадлежащих экземплярах .

...