public static PocketContainer IfOnlyOneImplementationUseIt(
            this PocketContainer container)
        {
            return(container.AddStrategy(type =>
            {
                if (type.IsInterface || type.IsAbstract)
                {
                    var implementations = Discover.ConcreteTypesDerivedFrom(type)
                                          .ToArray();

                    if (implementations.Count() == 1)
                    {
                        var implementation = implementations.Single();
                        return c => c.Resolve(implementation);
                    }
                }
                return null;
            }));
        }
Esempio n. 2
0
        /// <summary>
        /// A that should be overridden to actually add data to the context for seeding.
        ///                 The default implementation does nothing.
        /// </summary>
        /// <param name="context">The context to seed.</param>
        protected override void Seed(TDbContext context)
        {
            try
            {
                var configurerTypes = Discover.ConcreteTypesDerivedFrom(typeof(IDatabaseConfiguration <TDbContext>));

                foreach (var type in configurerTypes)
                {
                    dynamic configurer = Activator.CreateInstance(type);
                    configurer.ConfigureDatabase(context);
                }
            }
            catch (Exception ex)
            {
                log.Write(() => ex);
                throw;
            }

            base.Seed(context);
        }
        public static T GetOrDiscoverService <T>(this IDependencyResolver resolver, Type type)
        {
            return((T)resolvers.GetOrAdd(type, t =>
            {
                using (var scope = resolver.BeginScope())
                {
                    var service = scope.GetService(type);
                    if (service != null)
                    {
                        return service;
                    }

                    // try to discover the type and instantiate it without the help of the dependency resolver
                    var concreteType = Discover.ConcreteTypesDerivedFrom(type).FirstOrDefault();

                    if (concreteType != null)
                    {
                        return scope.GetService(concreteType) ?? Activator.CreateInstance(type);
                    }
                }
                throw new ArgumentException($"Could not find any instantiable types derived from {type}. Please register this type using the dependency resolver.");
            }));
        }
 protected virtual IEnumerable <Type> GetEntityModelConfigurationTypes()
 {
     return(Discover.ConcreteTypesDerivedFrom(typeof(IEntityModelConfiguration)));
 }