예제 #1
0
        public IEnumerable<IRegistration> GetRegistrationsFor(NancyContainer container, Type serviceType)
        {
            if (serviceType != null && serviceType.IsGenericTypeDefinedBy(typeof(Func<>)))
            {
                var baseServiceType = serviceType.FunctionReturnType();
                var baseServiceRegistrations = container.GetRegistrations(baseServiceType, null);

                var newRegistrations = new List<IRegistration>();
                foreach (var registration in baseServiceRegistrations)
                {
                    var factory = FuncGenerator.CreateDelegate(serviceType, container, registration.Name);

                    newRegistrations.Add(new FactoryRegistration(serviceType, c => factory, registration.Name));
                }
                return newRegistrations.AsEnumerable();
            }

            return Enumerable.Empty<IRegistration>();
        }
예제 #2
0
        public IEnumerable<IRegistration> GetRegistrationsFor(NancyContainer container, Type serviceType)
        {
            if (CanCreateRegistrationsFor(serviceType))
            {
                Type genericTypeDefinition = serviceType.GetGenericTypeDefinition();
                Type[] genericArguments = serviceType.GetGenericArguments();

                var newRegistrations = new List<IRegistration>();
                foreach (var registration in container.GetRegistrations(genericTypeDefinition, null))
                {
                    var typeRegistration = registration as TypeRegistration;
                    if (typeRegistration != null)
                    {
                        var implType = typeRegistration.ImplementationType.MakeGenericType(genericArguments);
                        newRegistrations.Add(new TypeRegistration(registration.Name, serviceType, implType));
                    }
                }
                return newRegistrations.AsEnumerable();
            }

            return Enumerable.Empty<IRegistration>();
        }