示例#1
0
        /// <summary>
        /// Provides instances of named registration. It is intended to be used in factory registrations, see example.
        /// </summary>
        /// <code>
        /// _container.AddTransient&lt;ClientA&gt;(s =&gt; new ClientA(s.GetByName&lt;IEnumerable&lt;int&gt;&gt;(&quot;list&quot;)));
        /// _container.AddTransient&lt;ClientB&gt;(s =&gt; new ClientB(s.GetByName&lt;IEnumerable&lt;int&gt;&gt;(&quot;hashSet&quot;)));
        /// </code>
        /// <returns></returns>
        public static TService GetServiceByName <TService>(this IServiceProvider provider, string name)
        {
            IServiceByNameFactory <TService> factory = provider.GetService <IServiceByNameFactory <TService> >();

            if (factory == null)
            {
                throw new InvalidOperationException($"The factory {typeof(IServiceByNameFactory<TService>)} is not registered. Please use {nameof(FactoryServiceCollectionExtensions)}.{nameof(AddByName)}() to register names.");
            }


            return(factory.GetByName(name));
        }
示例#2
0
        /// <summary>
        /// Provides instances of named registration. It is intended to be used in factory registrations, see example.
        /// </summary>
        /// <code>
        /// _container.AddTransient&lt;ClientA&gt;(s =&gt; new ClientA(s.GetByName&lt;IEnumerable&lt;int&gt;&gt;(&quot;list&quot;)));
        /// _container.AddTransient&lt;ClientB&gt;(s =&gt; new ClientB(s.GetByName&lt;IEnumerable&lt;int&gt;&gt;(&quot;hashSet&quot;)));
        /// </code>
        /// <returns></returns>
        public static object GetServiceByName(this IServiceProvider provider, Type serviceType, string name)
        {
            Type factoryType = typeof(IServiceByNameFactory <>).MakeGenericType(serviceType);
            IServiceByNameFactory factory = (IServiceByNameFactory)provider.GetService(factoryType);

            if (factory == null)
            {
                throw new InvalidOperationException($"The factory {factoryType} is not registered. Please use {nameof(FactoryServiceCollectionExtensions)}.{nameof(AddByName)}() to register names.");
            }

            return(factory.GetByName(name));
        }
        private bool TryGetServiceByNameFactory(Type serviceType, out IServiceByNameFactory serviceByNameFactory)
        {
            var factoryType = typeof(IServiceByNameFactory <>).MakeGenericType(serviceType);

            if (TryGetInstance(factoryType, out var factory))
            {
                serviceByNameFactory = factory as IServiceByNameFactory;
                return(serviceByNameFactory != null);
            }

            serviceByNameFactory = null;
            return(false);
        }
示例#4
0
 public CalculateService(ICacheManager cache, IServiceByNameFactory <IOperator> factory)
 {
     _cache   = cache;
     _factory = factory;
 }
 public DiscordBotService(DiscordSettings discordSettings, IServiceByNameFactory <IBotCommand> factory)
 {
     _discordSettings = discordSettings;
     _factory         = factory;
 }
 public SearchStrategyFactory(IServiceByNameFactory <ISearchStrategy> serviceByNameFactory)
 {
     _serviceByNameFactory = serviceByNameFactory;
 }
示例#7
0
 public MainRunner(IServiceByNameFactory <IPlugin> pluginFactory, IFactory <IFooService> fooFactory)
 {
     _pluginFactory = pluginFactory;
     _fooFactory    = fooFactory;
 }
 public EventController(IServiceByNameFactory <IEventHandler> eventFactory)
 {
     _eventFactory = eventFactory;
 }
示例#9
0
 public ClientZ(IServiceByNameFactory <IEnumerable <int> > factory)
 {
     Dependency = factory.GetByName("hashSet");
 }