public DependencyProvider(DependencyConfiguration dependencyConfiguration) { if (Validate(dependencyConfiguration)) { this.dependencyConfiguration = dependencyConfiguration; Implementations = new ConcurrentStack <Type>(); } else { throw new Exception("Dependency Configuration is not valid"); } }
private bool Validate(DependencyConfiguration dependencyConfiguration) { if (dependencyConfiguration != null) { foreach (var kvpair in dependencyConfiguration.Configuration) { foreach (var confType in kvpair.Value) { if (confType.Implementation.IsAbstract || confType.Implementation.IsInterface || !confType.ImplementationInterface.IsAssignableFrom(confType.Implementation)) { return(false); } } } return(true); } else { return(false); } }
static void Main(string[] args) { DependencyConfiguration dc = new DependencyConfiguration(); dc.Register <IBar, BarFromIBar>(); dc.Register <ABar, BarFromABar>(); dc.Register <IFoo, Foo>(); DependencyProvider dp = new DependencyProvider(dc); var foo = dp.Resolve <IFoo>(); DependencyConfiguration newDC = new DependencyConfiguration(); newDC.Register <IBar, BarFromIBar>(); newDC.Register <IBar, BarFromABar>(); DependencyProvider newDP = new DependencyProvider(newDC); var bars = newDP.ResolveAll <IBar>(); Console.WriteLine(bars.Count()); Console.ReadLine(); }