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;
     }));
 }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
     }
 }
Beispiel #5
0
        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);
            });
        }