/// <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); }
/// <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<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(); }