private static ComponentRegistration <TService> UsingFactoryMethod <TService>(ComponentRegistration <TService> registration, Microsoft.Extensions.DependencyInjection.ServiceDescriptor service) where TService : class { return(registration.UsingFactoryMethod((kernel) => { var serviceProvider = kernel.Resolve <System.IServiceProvider>(); return service.ImplementationFactory(serviceProvider) as TService; })); }
private static object GetInstance(this IServiceProvider provider, ServiceDescriptor descriptor) { if (descriptor.ImplementationInstance != null) { return(descriptor.ImplementationInstance); } if (descriptor.ImplementationType != null) { return(provider.GetServiceOrCreateInstance(descriptor.ImplementationType)); } return(descriptor.ImplementationFactory(provider)); }
static object CreateInstance(this IServiceProvider services, ServiceDescriptor descriptor) { if (descriptor.ImplementationInstance != null) { return(descriptor.ImplementationInstance); } if (descriptor.ImplementationFactory != null) { return(descriptor.ImplementationFactory(services)); } return(ActivatorUtilities.GetServiceOrCreateInstance(services, descriptor.ImplementationType)); }
private static void RegisterTransientDescriptor(IDependencyRegistrator container, ServiceDescriptor descriptor) { if (descriptor.ImplementationType != null) { container.Register(descriptor.ServiceType, descriptor.ImplementationType); } else if (descriptor.ImplementationFactory != null) { container.Register(descriptor.ServiceType, context => context .WithFactory(c => descriptor.ImplementationFactory(c.Resolve <IServiceProvider>()))); } else { container.RegisterInstance(descriptor.ServiceType, descriptor.ImplementationInstance); } }
private static Func <IServiceProvider, object> CreateServiceFromDescriptor(ServiceDescriptor serviceDescriptor) { if (serviceDescriptor.ImplementationInstance != null) { return((s) => serviceDescriptor.ImplementationInstance); } if (serviceDescriptor.ImplementationFactory != null) { return((s) => serviceDescriptor.ImplementationFactory(s)); } var serviceConstructor = serviceDescriptor.ImplementationType.GetConstructors()[0]; var createServiceDelegate = ConstructCreateObjectDelegate(serviceConstructor); return((s) => { var args = ResolveConstructorParams(serviceConstructor, s); return createServiceDelegate.Invoke(args); }); }