Пример #1
0
        static void Main(string[] args)
        {
            // REGISTRATION
            var container = new Container();

            // Register MasterCard conrete type to ICreditCard
            container.Configure(x => x.For <ICreditCard>().Use <MasterCard>());

            // Shopper class has ICreditCard in it's constructor
            // IoC will automatically get concrete type to MasterCard
            var shopper = container.GetInstance <Shopper>();

            shopper.Charge();

            // LIFECYCLE
            // Default lifecycle is "PerRequest"
            // Specify your own this way
            container.Configure(x => x.For <ICreditCard>().LifecycleIs(new SingletonLifecycle()));

            // FEATURES
            // TryGet => see if available => returns null if ICreditCard is NOT registered
            container.TryGetInstance <ICreditCard>();

            // Debugging => will show you what you have in container
            Console.WriteLine(container.WhatDoIHave());

            // Put registration into one registry class
            container = new Container(new MyRegistry());
        }
        public async Task Options_Configure_Child_Resolve_Child_Using_TenantContainerAdaptor()
        {
            ServiceCollection services = new ServiceCollection();

            services.AddLogging();

            //  ServiceProvider serviceProvider = services.BuildServiceProvider();


            StructureMap.Container container = new StructureMap.Container();
            Dotnettency.Container.StructureMap.ContainerExtensions.Populate(container, services);

            var adaptedContainer         = container.GetInstance <ITenantContainerAdaptor>();
            var containerEventsPublisher = container.TryGetInstance <ITenantContainerEventsPublisher <MyTenant> >();

            container.Configure(_ =>
                                _.For <ITenantContainerBuilder <MyTenant> >()
                                .Use(new TenantContainerBuilder <MyTenant>(services, adaptedContainer, (s, t) => {
                t.AddOptions();
                t.Configure <MyOptions>((a) =>
                {
                    a.Prop = true;
                });
            }, containerEventsPublisher))
                                );

            // container.Populate(services);

            var tenantContainerBuilder = adaptedContainer.GetRequiredService <ITenantContainerBuilder <MyTenant> >();
            var tenantContainer        = await tenantContainerBuilder.BuildAsync(new MyTenant());

            IOptions <MyOptions> options = tenantContainer.GetRequiredService <IOptions <MyOptions> >();

            Assert.True(options.Value?.Prop);
        }
Пример #3
0
        public bool TryResolve(Type type, object data, out object value)
        {
            if (data is null)
            {
                value = _container.TryGetInstance(type);

                return(value != null);
            }

            if (data is IDictionary <string, object> )
            {
                value = _container.TryGetInstance(type, new ExplicitArguments((IDictionary <string, object>)data));

                return(value != null);
            }

            throw new NotSupportedException();
        }
Пример #4
0
        static void Main(string[] args)
        {
            // REGISTRATION
            var container = new Container();

            // Register MasterCard conrete type to ICreditCard
            container.Configure(x => x.For <ICreditCard>().Use <MasterCard>());

            // Shopper class has ICreditCard in it's constructor
            // IoC will automatically get concrete type to MasterCard
            var shopper = container.GetInstance <Shopper>();

            shopper.Charge();

            // LIFECYCLE
            // Default lifecycle is "PerRequest"
            // Specify your own this way
            container.Configure(x => x.For <ICreditCard>().LifecycleIs(new SingletonLifecycle()));

            // FEATURES
            // TryGet => see if available => returns null if ICreditCard is NOT registered
            container.TryGetInstance <ICreditCard>();

            // Debugging => will show you what you have in container
            Console.WriteLine(container.WhatDoIHave());



            sContainer = new Container();
            sContainer.Configure(x => x.For <ICreditCard>().Use <MasterCard>());


            // Put registration into one registry class
            container = new Container(new MyRegistry());

            // Testing named instance
            var classA = container.GetInstance <ClassA>();
            var classB = container.GetInstance <ClassB>();

            //var c = new StructureMap.Container(ce =>
            //{
            //    ce.ForRequestedType<ICreditCard>().TheDefaultIsConcreteType<VisaCard>();
            //});
            //var test = c.GetInstance<ICreditCard>();

            //var mock = new Mock<Container>();
            //var t1 = mock.Setup(x => x.GetInstance<ICreditCard>()).Returns(new VisaCard());

            //IoC.Initialize();
            //var ccc = IoC.container.GetInstance<ICreditCard>();

            var mock = new Mock <IContainer>();
            var tt   = mock.Object;

            mock.Setup(x => x.GetInstance <ICreditCard>()).Returns(new MasterCard());
            //var tt2 = mock.Object.GetInstance<ICreditCard>();

            var worker = new Worker();

            worker.Work(mock.Object);

            var m = new Mock <HttpContextBase>();
            //var t2 = m.Setup(x => x.Request).Returns();
        }