2016-11-04 5 views
0

Я использую контекстными образ жизни для некоторых зависимостей в коде с CastleWindsor и их решения в рамках так:CastleWindsor BeginScope аналог в Ninject

using (_container.BeginScope()) 
    { 
     _implementation = _container.Resolve<IAbstration>(); 
    } 

ли Ninject есть аналоги такого поведения?

ответ

0

Там нет ничего встроенного, но вы можете легко добавить эту функцию, создав пользовательский класс, который наследует от 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); 
}