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