public DIContainer(bool registInterfaces) { _builder = new ContainerBuilder(); _builder.Register <ILoginViewModel>(new LoginViewModel()).ControlledBy <SingletonLifecycle>(); _builder.Register <IProductViewModel>(new ProductViewModel()); _container = _builder.Build(); }
private static IEnumerable <object> Resolve(LC.IContainer ctn, Type interfaceType, Type[] genericArgumentTypes, int idx = 0) { var result = new List <object>(); if (genericArgumentTypes.Length <= idx) { var typeToCheck = interfaceType.MakeGenericType(genericArgumentTypes); if (ctn.HasRegistration(typeToCheck)) { return(ctn.ResolveAll(typeToCheck)); } return(result); } var argumentType = genericArgumentTypes[idx]; do { if (interfaceType.GetGenericArguments()[idx].BaseType.IsAssignableFrom(argumentType)) { int counter = 0; result.AddRange(Resolve(ctn, interfaceType, genericArgumentTypes.ToList().Select(t => { if (counter == idx) { counter++; return(argumentType); } counter++; return(t); }).ToArray(), (idx + 1))); } argumentType = argumentType.BaseType; } while (argumentType != null); return(result); }