По умолчанию вам не нужно ничего утилизировать - Autofac автоматически идентифицирует и удаляет любые IDisposable
экземпляры, которые он создал, когда удаляется их содержащая область действия.
Вам нужно использовать Owned<T>
или ExternallyOwned()
только в том случае, если у вас есть причина управлять временем жизни объекта вручную. Если вы решите Owned<T>
, то вам следует позвонить t.Dispose()
самостоятельно - общий шаблон использования заключается в получении зависимости от делегата фабрики:
public class MyClass
{
private Func<Owned<User>> myDisposableFactory;
public MyClass(Func<Owned<User>> myDisposableFactory)
{
this.myDisposableFactory = myDisposableFactory;
}
public void DoSomething()
{
using (var disposable = this.myDisposableFactory())
{
// ...
disposable.Dispose();
}
}
}
Если вы зарегистрируете тип как ExternallyOwned()
, то Autofac не будет распоряжаться каким-либо разрешенным экземпляром, когда заканчивается область действия, содержащая время жизни, - вы можете управлять им.
Взгляните на статью Николаса Блумхардта о времени жизни для получения дополнительной информации.