В Autofac нет явного выпуска. Время жизни компонентов в Autofac управляется областями действия времени жизни.Возможно, ближе всего к явному освобождению объекта является использование поддержки IDisposable , присущей жизненным областям.
Скажем, у вас есть класс, реализующий IDisposable, и вы регистрируете его:
var builder = new ContainerBuilder();
builder.RegisterType<SomeComponent>().As<IMyDependency>().InstancePerLifetimeScope();
var container = builder.Build();
Если вы создаете область действия, для которой необходимо разрешить компонент, то при утилизации области действия, как и ваш компонент:
using(var lifetime = container.BeginLifetimeScope())
{
var myThing = lifetime.Resolve<IMyDependency>();
// myThing.Dispose() gets called at the end of the using
}
В качестве альтернативы вы можете посмотреть на принадлежащих экземпляров , где вы контролируете, когда вызывается IDisposable.Dispose ().
Нет эквивалента времени жизни пула в Autofac. У вас есть выбор...
- Per Dependency: создайте новый экземпляр при каждом разрешении компонента.
- Per Lifetime Scope: создайте новый экземпляр один раз для каждой собственной области действия (как вы видели ввышеприведенный пример).
- Одиночный экземпляр: просто создайте его.
В вики-статье есть статья о доступных для жизни областях .
Вы, вероятно, могли бы сделать несколько пользовательских кодов, чтобы заставить работать пул, включая создание собственной реализации IComponentLifetime и расширения IRegistrationBuilder, чтобы вы могли сделать что-то вроде ...
builder.RegisterType<Foo>().As<IFoo>().PooledLifetime(32);
... но яне думайте, что это будет одна или две строки.Если вы в конечном итоге создадите его, рассмотрите возможность добавления обратно в AutofacContrib.
Интерфейс IInterceptor находится в Castle.Core.dll - Castle.DynamicProxy.IInterceptor, а не в AutofacContrib.DynamicProxy2.