Там нет ничего встроенного, но вы можете легко добавить эту функцию, создав пользовательский класс, который наследует от DisposableObject
:
sealed class Scope : DisposableObject { }
Вы должны хранить Scope
экземпляров на активном потоке или контекст асинхронного, например, с помощью AsyncLocal<T>
:
static readonly AsyncLocal<Scope> scopeProvider = new AsyncLocal<Scope>();
Теперь вы можете создать свой собственный BeginScope()
метод, который использует scopeProvider
следующим образом:
static Scope BeginScope() => scopeProvider.Value = new Scope();
Теперь вы можете реализовать свой вариант использования:
using (BeginScope())
{
_implementation = _kernel.Get<IAbstration>();
}
Регистрация экземпляры могут область действия можно сделать с помощью метода: InScope
static Scope RequestScope(IContext context) => scopeProvider.Value;
void Configure()
{
IKernelConfiguration config = new KernelConfiguration();
config.Bind<IUserService>().To<AspNetUserService>().InScope(RequestScope);
}