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