private static ServiceDescriptor Decorate <TService>(this ServiceDescriptor descriptor, Func <TService, TService> decorator) { return(descriptor.WithFactory(provider => decorator((TService)provider.GetInstance(descriptor)))); }
private static ServiceDescriptor Decorate(this ServiceDescriptor descriptor, Type decoratorType) { return(descriptor.WithFactory(provider => provider.CreateInstance(decoratorType, provider.GetInstance(descriptor)))); }
private static ServiceDescriptor Adapt <TService, TTarget>(this ServiceDescriptor descriptor, Func <TService, IServiceProvider, TTarget> decorator) { return(descriptor.WithFactory(provider => decorator((TService)provider.GetInstance(descriptor), provider))); }