Example #1
0
        public static T GetProvider <T>(this IProviderGroup providerGroup, string name, char separator = '.')
            where T : class
        {
            if (providerGroup == null)
            {
                throw new ArgumentNullException(nameof(providerGroup));
            }
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            IProviderGroup group = providerGroup;

            string[] groups = name.Split(separator);
            if (groups.Length < 1 || !MatchName(groups[0], providerGroup))
            {
                return(default(T));
            }

            for (int i = 1; group != null && i < groups.Length - 1; i++)
            {
                string groupName = groups[i];
                group = group.Providers
                        .Select(kvp => kvp.Value as IProviderGroup)
                        .FirstOrDefault(provider => provider != null && MatchName(groupName, provider));
            }

            string providerName = groups.Last();

            return(group?.Providers.Select(kvp => kvp.Value)
                   .FirstOrDefault(provider => MatchName(providerName, provider) && provider is T) as T);
        }
Example #2
0
        public static T GetProvider <T>(this IServiceProvider serviceProvider, string name, char separator = '.')
            where T : class
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            string[] groups = name.Split(separator);

            switch (groups.Length)
            {
            case 0:
                return(default(T));

            case 1:
                string providerName = groups[0];
                return(serviceProvider.GetServices <IProvider>()
                       .FirstOrDefault(provider => provider is T && MatchName(providerName, provider)) as T);

            default:
                string         groupName = groups[0];
                IProviderGroup group     = serviceProvider.GetServices <IProvider>()
                                           .FirstOrDefault(provider => provider is IProviderGroup && MatchName(groupName, provider)) as IProviderGroup;
                return(group?.GetProvider <T>(name, separator));
            }
        }
Example #3
0
 public static bool TryGetProvider <TKey, TProvider>(this IProviderGroup <TKey, TProvider> providerGroup, TKey key, out TProvider provider)
     where TKey : IComparable <TKey>
     where TProvider : class
 {
     provider = providerGroup.Providers.FirstOrDefault(kvp => kvp.Key.Equals(key)).Value;
     return(provider != default(TProvider));
 }
Example #4
0
        public static TProvider GetProvider <TKey, TProvider>(this IProviderGroup <TKey, TProvider> providerGroup, TKey key)
            where TKey : IComparable <TKey>
            where TProvider : class
        {
            TProvider provider;

            return(providerGroup.TryGetProvider(key, out provider)
                ? provider
                : default(TProvider));
        }
Example #5
0
 public SomePersistentGrain(IRuntime runtime, ILoggerFactory loggerFactory, IProviderGroup <string, IStorageProvider> storageProviderGroup)
 {
     logger = loggerFactory.CreateLogger <AzureStorageProvider>();
     // assuming grain know which provider it want's via attribute, or something.
     storageProvider = storageProviderGroup.GetProvider("Azure");
 }