static ContainerBuilder() { var files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "appget.*", SearchOption.TopDirectoryOnly).Where(c => c.EndsWith(".exe") || c.EndsWith(".dll")); var ass = files.Select(Assembly.LoadFile).ToList(); AssemblyTypes = ass.SelectMany(c => c.ExportedTypes .Where(t => !t.IsAbstract && !t.IsInterface && !t.IsEnum && t.Namespace != null && t.Namespace.StartsWith("AppGet."))) .ToList(); var rules = Rules.Default .WithAutoConcreteTypeResolution() .WithDefaultReuse(Reuse.Singleton) .WithDefaultIfAlreadyRegistered(IfAlreadyRegistered.AppendNotKeyed); var made = FactoryMethod.Constructor(mostResolvable: true); Container = new Container(rules); Container.RegisterMany(ass, ShouldRegisterAs, made: made); RegisterLoggerFactory(); RegisterTransienttInstallers(made); RegisterHandlers <ICommandHandler>(); Container.Resolve <IHub>().Publish(new ApplicationStartedEvent()); }
public void For_consistency_I_can_specify_FactoryMethod_to_be_a_constructor() { var container = new Container(); container.Register <Ac>(made: Made.Of(FactoryMethod.Constructor())); var ac = container.WithDependencies(Parameters.Of.Type(_ => "x")).Resolve <Ac>(); Assert.IsNotNull(ac); }
public void Constructor_FactoryMethod_will_throw_for_not_defined_impl_type() { var container = new Container(); container.Register <BaseA>(made: FactoryMethod.Constructor()); var ex = Assert.Throws <ContainerException>(() => container.Resolve <BaseA>()); Assert.AreEqual( Error.NameOf(Error.ImplTypeIsNotSpecifiedForAutoCtorSelection), Error.NameOf(ex.Error)); }
private static void RegisterHandlers <THandler>() { Container.Unregister <THandler>(); var made = FactoryMethod.Constructor(mostResolvable: true); foreach (var handler in AssemblyTypes.Where(c => c.ImplementsServiceType <THandler>())) { var handles = HandlesAttribute.GetValue(handler); if (handles != null) { Container.Register(typeof(THandler), handler, made: made, serviceKey: handles); } } }