Ejemplo n.º 1
0
 public DIContainer(bool registInterfaces)
 {
     _builder = new ContainerBuilder();
     _builder.Register <ILoginViewModel>(new LoginViewModel()).ControlledBy <SingletonLifecycle>();
     _builder.Register <IProductViewModel>(new ProductViewModel());
     _container = _builder.Build();
 }
Ejemplo n.º 2
0
        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);
        }