Example #1
0
        /// <summary>
        /// Adds classes that contain RegistrationAttribute in given discoveredAssemblies or discoveredAssemblies with DiscoverableAssemblyAttribute assembly attribute
        /// </summary>
        /// <param name="services"></param>
        /// <param name="assembliesToScan">DiscoveredAssemblies to scan for types with RegistrationAttribute,
        ///      if null DiscoveredAssemblies with DiscoverableAssemblyAttribute are used to filter.</param>
        /// <param name="dependentRegistrationFactory">Optional custom IDependentRegistrationFacory</param>
        /// <param name="registrationSorter">Optional custom registration sorter.</param>
        /// <returns></returns>
        public static IServiceCollection AddDotNetStarterRegistrations
        (
            this IServiceCollection services,
            IEnumerable <Assembly> assembliesToScan = null,
            IDependentRegistrationFactory dependentRegistrationFactory = null,
            IRegistrationSorter registrationSorter = null
        )
        {
            var assemblies = assembliesToScan ??
                             AssemblyLoader()
                             .Where(a => a.GetCustomAttribute <DiscoverableAssemblyAttribute>() != null);

            var registrations =
                (dependentRegistrationFactory ?? new DependentRegistrationFactory())
                .CreateDependentRegistrations(assemblies);

            (registrationSorter ?? new RegistrationSorter()).Sort(registrations);

            foreach (var t in registrations)
            {
                services.Add
                (
                    new ServiceDescriptor
                    (
                        t.Registration.ServiceType,
                        t.Implementation,
                        (t.CustomLifeCycle ?? t.Registration.Lifecycle).ConvertToServiceLifetime()
                    )
                );
            }

            return(services);
        }
Example #2
0
        /// <summary>
        /// Add classes with [Registration] attributes to Episerver Service Locator.
        /// </summary>
        /// <param name="services"></param>
        /// <param name="assembliesToScan">DiscoveredAssemblies to scan for types with RegistrationAttribute,
        ///      if null DiscoveredAssemblies with DiscoverableAssemblyAttribute are used to filter.</param>
        /// <param name="dependentRegistrationFactory">Optional custom IDependentRegistrationFacory</param>
        /// <param name="registrationSorter">Optional custom registration sorter.</param>
        /// <param name="addServiceAccessor">Optional function to determine if a service accessor is needed for Inject&lt;T> usages</param>
        /// <param name="registrationFilter">Optional action to modify regististrations, add/remove or changelifestyle.</param>
        public static void AddDotNetStarterRegistrations
        (
            this IServiceConfigurationProvider services,
            IEnumerable <Assembly> assembliesToScan = null,
            IDependentRegistrationFactory dependentRegistrationFactory = null,
            IRegistrationSorter registrationSorter = null,
            Func <DependentRegistration, bool> addServiceAccessor            = null,
            Action <ICollection <DependentRegistration> > registrationFilter = null
        )
        {
            var assemblies = assembliesToScan ??
                             AssemblyLoader()
                             .Where(a => a.GetCustomAttribute <DiscoverableAssemblyAttribute>() != null);
            var registrations =
                (dependentRegistrationFactory ?? new DependentRegistrationFactory()).
                CreateDependentRegistrations(assemblies);

            registrationFilter?.Invoke(registrations);
            (registrationSorter ?? new RegistrationSorter()).Sort(registrations);

            foreach (var t in registrations)
            {
                var service = services.Add
                              (
                    t.Registration.ServiceType,
                    t.Implementation,
                    (t.CustomLifeCycle ?? t.Registration.Lifecycle).ConvertToServiceLifetime()
                              );

                if (addServiceAccessor?.Invoke(t) == true)
                {
                    service.AddServiceAccessor();
                }
            }
        }
 public RegistrationHelper(IDependentRegistrationFactory dependentRegistrationFactory = null, IRegistrationSorter registrationSorter = null)
 {
     _dependentRegistrationFactory = dependentRegistrationFactory ?? new DependentRegistrationFactory();
     _registrationSorter           = registrationSorter ?? new RegistrationSorter();
 }