コード例 #1
0
        public IDependencyDefinition GetDefinitionFor(Type type, string key)
        {
            var definitions = new List <IDependencyDefinition>();

            if (!Definitions.TryGetValue(type, out definitions) && type.IsGenericType)
            {
                Definitions.TryGetValue(type.GetGenericTypeDefinition(), out definitions);
            }

            if (definitions == null && type.IsConcrete())
            {
                var pluginType = type.IsGenericType
                                     ? type.GetGenericTypeDefinition()
                                     : type;
                var definition = DependencyExpression.For(pluginType);
                definition.Use(type);
                definitions = new List <IDependencyDefinition>()
                {
                    definition
                };
            }
            else
            {
                definitions = definitions ?? new List <IDependencyDefinition>();
            }

            var matches = definitions
                          .Where(x => x.PluginName == key);

            return(matches.FirstOrDefault(x => x.IsSingleton) ?? matches.FirstOrDefault());
        }
コード例 #2
0
        /// <summary>
        /// Returns expression builder for rule's dependencies.
        /// </summary>
        /// <returns>Dependencies expression builder.</returns>
        protected IDependencyExpression Dependency()
        {
            var builder    = _builder.Dependencies();
            var expression = new DependencyExpression(builder, _symbolStack);

            return(expression);
        }
コード例 #3
0
        public SimpleDependencyRegistry()
        {
            Providers   = new FactoryProvider();
            Definitions = new ConcurrentDictionary <Type, List <IDependencyDefinition> >();

            var enumerableFactory = DependencyExpression.For(typeof(IEnumerable <>));

            enumerableFactory.CreateWith(x =>
            {
                var type      = x.TypeArguments.First();
                var list      = GetAllInstances(type);
                var converted = list.ToListOf(type);
                return(converted);
            });

            var listFactory = DependencyExpression.For(typeof(IList <>));

            listFactory.CreateWith(x => GetAllInstances(x.TypeArguments.First()).ToList());

            Register(enumerableFactory);
            Register(listFactory);
        }