FeatureManager.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Immutable;
  4. using Abp.Dependency;
  5. namespace Abp.Application.Features
  6. {
  7. /// <summary>
  8. /// Implements <see cref="IFeatureManager"/>.
  9. /// </summary>
  10. internal class FeatureManager : FeatureDefinitionContextBase, IFeatureManager, ISingletonDependency
  11. {
  12. private readonly IIocManager _iocManager;
  13. private readonly IFeatureConfiguration _featureConfiguration;
  14. /// <summary>
  15. /// Creates a new <see cref="FeatureManager"/> object
  16. /// </summary>
  17. /// <param name="iocManager">IOC Manager</param>
  18. /// <param name="featureConfiguration">Feature configuration</param>
  19. public FeatureManager(IIocManager iocManager, IFeatureConfiguration featureConfiguration)
  20. {
  21. _iocManager = iocManager;
  22. _featureConfiguration = featureConfiguration;
  23. }
  24. /// <summary>
  25. /// Initializes this <see cref="FeatureManager"/>
  26. /// </summary>
  27. public void Initialize()
  28. {
  29. foreach (var providerType in _featureConfiguration.Providers)
  30. {
  31. using (var provider = CreateProvider(providerType))
  32. {
  33. provider.Object.SetFeatures(this);
  34. }
  35. }
  36. Features.AddAllFeatures();
  37. }
  38. /// <summary>
  39. /// Gets a feature by its given name
  40. /// </summary>
  41. /// <param name="name">Name of the feature</param>
  42. public Feature Get(string name)
  43. {
  44. var feature = GetOrNull(name);
  45. if (feature == null)
  46. {
  47. throw new AbpException("There is no feature with name: " + name);
  48. }
  49. return feature;
  50. }
  51. /// <summary>
  52. /// Gets all the features
  53. /// </summary>
  54. public IReadOnlyList<Feature> GetAll()
  55. {
  56. return Features.Values.ToImmutableList();
  57. }
  58. private IDisposableDependencyObjectWrapper<FeatureProvider> CreateProvider(Type providerType)
  59. {
  60. return _iocManager.ResolveAsDisposable<FeatureProvider>(providerType);
  61. }
  62. }
  63. }