Example #1
0
        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));
        }
Example #4
0
        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);
                }
            }
        }