コード例 #1
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            AppLogger.Info("Logger attached");

            ThemeManager.EnableDefaultThemeLoading      = false;
            ThemeManager.EnableDPICorrection            = true;
            ApplicationThemeHelper.ApplicationThemeName = ThemeConstants.DevExpressThemeName;

            AppDomain.CurrentDomain.UnhandledException += this.CurrentDomainOnUnhandledException;
            //AppDomain.CurrentDomain.FirstChanceException += this.CurrentDomainOnFirstChanceException;

            DispatcherUnhandledException          += this.HandleDispatcherException;
            TaskScheduler.UnobservedTaskException += this.HandleUnobservedTaskException;

            var serviceContainer = ServiceContainerBuilder.CreateDependencyInjectionContainer();

            this._currentApplication = new ApplicationRuntime(Current, serviceContainer);

            this._bootstrapper = new Bootstrapper(this._currentApplication, serviceContainer);
            this._bootstrapper.Run();

            var shellController = this.CreateShellController(serviceContainer);
            var shell           = new Shell(shellController.ViewModel);

            this._currentApplication.AttachShell(shellController, shell);
            this._currentApplication.ShowUi();
        }
コード例 #2
0
        public void Setup()
        {
            var services = ServiceContainerBuilder.ConfigureServices();
            var provider = services.BuildServiceProvider();

            _plateau = provider.GetService <IPlateau>();
            _rover   = provider.GetService <IRover>();
        }
コード例 #3
0
        public void Setup()
        {
            var services        = ServiceContainerBuilder.ConfigureServices();
            var serviceProvider = services.BuildServiceProvider();

            rover = serviceProvider.GetService <IRover>();

            rover.SetPosition("1 2 N");
        }
コード例 #4
0
        public static void ServiceContainerTest()
        {
            var builder = new ServiceContainerBuilder();

            builder.AddSingletonProxy <IFly, MonkeyKing>();

            using var container = builder.BuildFluentAspectsContainer(options =>
            {
                options.InterceptAll()
                .With <LogInterceptor>();
            });

            container.ResolveService <IFly>()
            .Fly();

            Console.WriteLine();
        }
コード例 #5
0
        public void Setup()
        {
            var services        = ServiceContainerBuilder.ConfigureServices();
            var serviceProvider = services.BuildServiceProvider();

            var plateau = serviceProvider.GetService <IPlateau>();

            plateau.SetSize("5 5");

            _roverCommander         = serviceProvider.GetService <ICommander>();
            _roverCommander.Plateau = plateau;

            _rover = serviceProvider.GetService <IRover>();
            _rover.SetPosition("1 2 N");
            _rover.Commands = "LMLMLMLMM";

            _roverCommander.Plateau.AddRover(_rover);
        }
コード例 #6
0
        public void Setup()
        {
            var services = new ServiceCollection();

            services.AddSingleton <A>();
            services.AddSingleton <B>();
            services.AddSingleton <C>();
            _singletonSp = services.BuildServiceProvider();

            services = new ServiceCollection();
            services.AddScoped <A>();
            services.AddScoped <B>();
            services.AddScoped <C>();
            _scopedSp = services.BuildServiceProvider().CreateScope();

            services = new ServiceCollection();
            services.AddTransient <A>();
            services.AddTransient <B>();
            services.AddTransient <C>();
            _transientSp = services.BuildServiceProvider();

            var containerBuilder = new ServiceContainerBuilder();

            containerBuilder.AddSingleton <A>();
            containerBuilder.AddSingleton <B>();
            containerBuilder.AddSingleton <C>();

            _singletonContainer = containerBuilder.Build();

            containerBuilder = new ServiceContainerBuilder();
            containerBuilder.AddScoped <A>();
            containerBuilder.AddScoped <B>();
            containerBuilder.AddScoped <C>();

            _scopedRootContainer = containerBuilder.Build();
            _scopedContainer     = _scopedRootContainer.CreateScope();

            containerBuilder = new ServiceContainerBuilder();
            containerBuilder.AddTransient <A>();
            containerBuilder.AddTransient <B>();
            containerBuilder.AddTransient <C>();

            _transientContainer = containerBuilder.Build();
        }
コード例 #7
0
        public DependencyInjectionTest()
        {
            var containerBuilder = new ServiceContainerBuilder();

            containerBuilder.AddSingleton <IConfiguration>(new ConfigurationBuilder().Build());
            containerBuilder.AddScoped <IFly, MonkeyKing>();
            containerBuilder.AddScoped <IFly, Superman>();

            containerBuilder.AddScoped <HasDependencyTest>();
            containerBuilder.AddScoped <HasDependencyTest1>();
            containerBuilder.AddScoped <HasDependencyTest2>();
            containerBuilder.AddScoped <HasDependencyTest3>();
            containerBuilder.AddScoped(typeof(HasDependencyTest4 <>));

            containerBuilder.AddTransient <WuKong>();
            containerBuilder.AddScoped <WuJing>(serviceProvider => new WuJing());
            containerBuilder.AddSingleton(typeof(GenericServiceTest <>));

            _container = containerBuilder.Build();
        }
コード例 #8
0
    public ServiceContainerBuilderBuildTest(ITestOutputHelper output)
    {
        var services = new ServiceContainerBuilder();

        services.AddSingleton <IIdGenerator, GuidIdGenerator>();
        services.AddSingleton(GuidIdGenerator.Instance);
        services.AddSingleton <IUserIdProvider, EnvironmentUserIdProvider>();
        services.AddSingleton <EnvironmentUserIdProvider>();

        services.AddSingleton <IEventPublisher, EventQueuePublisher>();
        services.AddSingleton <IOptions <EventQueuePublisherOptions> >(
            new OptionsWrapper <EventQueuePublisherOptions>(new EventQueuePublisherOptions()));
        services.AddSingleton <IEventQueue, EventQueueInMemory>();

        services.AddSingleton <EventHandlerBase <TestEvent> >(DelegateEventHandler.FromAction <TestEvent>(_ => { }));

        services.AddSingleton(typeof(IEventHandler <>), typeof(ServiceCollectionBuildTest.TestGenericEventHandler <>));

        _serviceProvider = services.BuildFluentAspectsContainer(options =>
        {
            options.InterceptAll()
            .With <TestOutputInterceptor>();
        });
    }
コード例 #9
0
        public static void BuiltInIocTest()
        {
            IServiceContainerBuilder containerBuilder = new ServiceContainerBuilder();

            containerBuilder.AddSingleton <IConfiguration>(new ConfigurationBuilder()
                                                           .AddJsonFile("appsettings.json")
                                                           .Build()
                                                           );
            containerBuilder.AddScoped <IFly, MonkeyKing>();
            containerBuilder.AddScoped <IFly, Superman>();

            containerBuilder.AddScoped <HasDependencyTest>();
            containerBuilder.AddScoped <HasDependencyTest1>();
            containerBuilder.AddScoped <HasDependencyTest2>();
            containerBuilder.AddScoped <HasDependencyTest3>();
            containerBuilder.AddScoped(typeof(HasDependencyTest4 <>));

            containerBuilder.AddTransient <WuKong>();
            containerBuilder.AddScoped <WuJing>(serviceProvider => new WuJing());
            containerBuilder.AddSingleton(typeof(GenericServiceTest <>));

            containerBuilder.RegisterAssemblyModules();

            using (var container = containerBuilder.Build())
            {
                var idGenerator = container.ResolveRequiredService <IIdGenerator>();
                Console.WriteLine(idGenerator.NewId());
                var rootConfig = container.ResolveService <IConfiguration>();
                //try
                //{
                //    container.ResolveService<IFly>();
                //}
                //catch (Exception e)
                //{
                //    Console.WriteLine(e);
                //}

                using (var scope = container.CreateScope())
                {
                    var config = scope.ResolveService <IConfiguration>();
                    var fly1   = scope.ResolveService <IFly>();
                    var fly2   = scope.ResolveService <IFly>();

                    var wukong1 = scope.ResolveService <WuKong>();
                    var wukong2 = scope.ResolveService <WuKong>();

                    var wuJing1 = scope.ResolveService <WuJing>();
                    var wuJing2 = scope.ResolveService <WuJing>();

                    Console.WriteLine("fly1 == fly2,  {0}", fly1 == fly2);
                    Console.WriteLine("rootConfig == config, {0}", rootConfig == config);
                    Console.WriteLine("wukong1 == wukong2, {0}", wukong1 == wukong2);
                    Console.WriteLine("wujing1 == wujing2, {0}", wuJing1 == wuJing2);

                    fly1.Fly();

                    wukong1.Jump();
                    wukong2.Jump();

                    wuJing1.Eat();

                    var s0 = scope.ResolveRequiredService <HasDependencyTest>();
                    s0.Test();
                    Console.WriteLine($"s0._fly == fly1 : {s0._fly == fly1}");

                    var s1 = scope.ResolveService <HasDependencyTest1>();
                    s1.Test();

                    var s2 = scope.ResolveService <HasDependencyTest2>();
                    s2.Test();

                    var s3 = scope.ResolveService <HasDependencyTest3>();
                    s3.Test();

                    var s4 = scope.ResolveService <HasDependencyTest4 <string> >();
                    s4.Test();

                    using (var innerScope = scope.CreateScope())
                    {
                        var config2 = innerScope.ResolveRequiredService <IConfiguration>();
                        Console.WriteLine("rootConfig == config2, {0}", rootConfig == config2);
                        var fly3 = innerScope.ResolveRequiredService <IFly>();
                        fly3.Fly();
                    }

                    var number = config.GetAppSetting <int>("Number");
                    Console.WriteLine(number);

                    var flySvcs = scope.ResolveServices <IFly>();
                    foreach (var f in flySvcs)
                    {
                        f.Fly();
                    }
                }

                var genericService1 = container.ResolveRequiredService <GenericServiceTest <int> >();
                genericService1.Test();

                var genericService2 = container.ResolveRequiredService <GenericServiceTest <string> >();
                genericService2.Test();
            }
        }
コード例 #10
0
 public TestInfrastructure()
 {
     this.TestData    = new TestData();
     this.DiContainer = ServiceContainerBuilder.CreateDependencyInjectionContainer();
 }
コード例 #11
0
        public static IServiceContainer BuildFluentAspectsContainer(this IServiceContainerBuilder serviceCollection,
                                                                    Action <FluentAspectOptions> optionsAction,
                                                                    Action <IFluentAspectsServiceContainerBuilder> aspectBuildAction = null,
                                                                    Expression <Func <Type, bool> > ignoreTypesFilter = null)
        {
            var services = new ServiceContainerBuilder();

            var aspectBuilder = null != optionsAction
                ? serviceCollection.AddFluentAspects(optionsAction)
                : serviceCollection.AddFluentAspects();

            aspectBuildAction?.Invoke(aspectBuilder);

            Expression <Func <Type, bool> > ignoreTypesExpression = t => "WeihanLi.Common.Aspect".Equals(t.Namespace);

            if (null != ignoreTypesFilter)
            {
                ignoreTypesExpression = ignoreTypesExpression.Or(ignoreTypesFilter);
            }

            var ignoreTypesPredicate = ignoreTypesExpression.Compile();

            using (var serviceProvider = serviceCollection.Build())
            {
                var proxyTypeFactory = serviceProvider.ResolveRequiredService <IProxyTypeFactory>();

                foreach (var descriptor in serviceCollection)
                {
                    if (descriptor.ServiceType.IsSealed ||
                        descriptor.ServiceType.IsNotPublic ||
                        descriptor.ServiceType.IsGenericTypeDefinition
                        )
                    {
                        services.Add(descriptor);
                        continue;
                    }

                    if (ignoreTypesPredicate(descriptor.ServiceType))
                    {
                        services.Add(descriptor);
                        continue;
                    }

                    if (descriptor.ImplementType != null)
                    {
                        if (descriptor.ImplementType.IsNotPublic ||
                            descriptor.ImplementType.IsProxyType()
                            )
                        {
                            services.Add(descriptor);
                            continue;
                        }

                        if (descriptor.ServiceType.IsClass &&
                            descriptor.ImplementType.IsSealed)
                        {
                            services.Add(descriptor);
                            continue;
                        }

                        if (descriptor.ServiceType.IsGenericTypeDefinition ||
                            descriptor.ImplementType.IsGenericTypeDefinition)
                        {
                            var proxyType = proxyTypeFactory.CreateProxyType(descriptor.ServiceType, descriptor.ImplementType);
                            services.Add(new ServiceDefinition(descriptor.ServiceType, proxyType,
                                                               descriptor.ServiceLifetime));
                            continue;
                        }
                    }

                    Func <IServiceProvider, object> serviceFactory = null;

                    if (descriptor.ImplementationInstance != null)
                    {
                        if (descriptor.ImplementationInstance.GetType().IsPublic)
                        {
                            serviceFactory = provider => provider.ResolveRequiredService <IProxyFactory>()
                                             .CreateProxyWithTarget(descriptor.ServiceType, descriptor.ImplementationInstance);
                        }
                    }
                    else if (descriptor.ImplementType != null)
                    {
                        serviceFactory = provider =>
                        {
                            var proxy = provider.ResolveRequiredService <IProxyFactory>()
                                        .CreateProxy(descriptor.ServiceType, descriptor.ImplementType);
                            return(proxy);
                        };
                    }
                    else if (descriptor.ImplementationFactory != null)
                    {
                        serviceFactory = provider =>
                        {
                            var implement = descriptor.ImplementationFactory(provider);
                            if (implement == null)
                            {
                                return(null);
                            }

                            var implementType = implement.GetType();
                            if (implementType.IsNotPublic ||
                                implementType.IsProxyType())
                            {
                                return(implement);
                            }

                            return(provider.ResolveRequiredService <IProxyFactory>()
                                   .CreateProxyWithTarget(descriptor.ServiceType, implement));
                        };
                    }

                    if (null != serviceFactory)
                    {
                        services.Add(new ServiceDefinition(descriptor.ServiceType, serviceFactory,
                                                           descriptor.ServiceLifetime));
                    }
                    else
                    {
                        services.Add(descriptor);
                    }
                }
            }

            var container = services.Build();

            DependencyResolver.SetDependencyResolver(container);
            return(container);
        }
コード例 #12
0
        static void Main(string[] args)
        {
            var services        = ServiceContainerBuilder.ConfigureServices();
            var serviceProvider = services.BuildServiceProvider();

            Console.WriteLine("Welcome to the Mars Rover Commander");

            Console.WriteLine("Enter Plateau Size(Ex: 5 5) : ");
            var plateauSize = Console.ReadLine();

            var plateau = serviceProvider.GetService <IPlateau>();

            plateau.SetSize(plateauSize);

            var roverCommander = serviceProvider.GetService <IRoverCommander>();

            roverCommander.Plateau = plateau;

            while (true)
            {
                try
                {
                    Console.WriteLine("Enter Rover Position(Ex: 1 2 N) : ");
                    var roverPosition = Console.ReadLine();

                    Console.WriteLine("Enter Rover Commands (Ex : LMLMLMLMM) : ");
                    var roverCommands = Console.ReadLine();

                    IRover rover = serviceProvider.GetService <IRover>();
                    rover.SetPosition(roverPosition);
                    rover.Commands = roverCommands;

                    roverCommander.Plateau.AddRover(rover);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

                Console.WriteLine("Do you want to add one more Rover?(Y/N) : ");
                var continueInput = Console.ReadLine();

                if (continueInput != "Y")
                {
                    break;
                }
            }
            ;

            foreach (var rover in roverCommander.Plateau.Rovers)
            {
                try
                {
                    roverCommander.Move(rover);
                    Console.WriteLine($"{rover.LocationX} {rover.LocationY} {rover.Direction.ToString()}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            Console.Read();
        }
コード例 #13
0
 public Bootstrapper(IApplicationRuntime application) : this(application,
                                                             ServiceContainerBuilder.CreateDependencyInjectionContainer())
 {
 }
コード例 #14
0
        public static IServiceContainer BuildFluentAspectsContainer(this IServiceContainerBuilder serviceCollection,
                                                                    Action <FluentAspectOptions> optionsAction,
                                                                    Action <IFluentAspectsServiceContainerBuilder> aspectBuildAction = null,
                                                                    Func <Type, bool> ignoreTypesPredict = null)
        {
            var services = new ServiceContainerBuilder();

            var aspectBuilder = null != optionsAction
                ? services.AddFluentAspects(optionsAction)
                : services.AddFluentAspects();

            aspectBuildAction?.Invoke(aspectBuilder);

            foreach (var descriptor in serviceCollection)
            {
                if (ignoreTypesPredict?.Invoke(descriptor.ServiceType) == true)
                {
                    services.Add(descriptor);
                    continue;
                }

                if (descriptor.ServiceType.IsSealed ||
                    descriptor.ImplementType.IsProxyType() ||
                    (descriptor.ServiceType.IsClass && (descriptor.ImplementType?.IsSealed == true || descriptor.ImplementType?.IsPublic == false)))
                {
                    services.Add(descriptor);
                }
                else
                {
                    Func <IServiceProvider, object> serviceFactory = null;

                    if (descriptor.ImplementationInstance != null)
                    {
                        serviceFactory = provider => provider.ResolveRequiredService <IProxyFactory>()
                                         .CreateProxyWithTarget(descriptor.ServiceType, descriptor.ImplementationInstance);
                    }
                    else if (descriptor.ImplementationFactory != null)
                    {
                        serviceFactory = provider =>
                        {
                            var implement = descriptor.ImplementationFactory(provider);
                            if (implement?.GetType().IsProxyType() == true)
                            {
                                return(implement);
                            }
                            return(provider.ResolveRequiredService <IProxyFactory>()
                                   .CreateProxyWithTarget(descriptor.ServiceType, implement));
                        };
                    }
                    else if (descriptor.ImplementType != null)
                    {
                        serviceFactory = provider => provider.ResolveRequiredService <IProxyFactory>()
                                         .CreateProxy(descriptor.ServiceType, descriptor.ImplementType);
                    }

                    if (null != serviceFactory)
                    {
                        services.Add(new ServiceDefinition(descriptor.ServiceType, serviceFactory,
                                                           descriptor.ServiceLifetime));
                    }
                    else
                    {
                        services.Add(descriptor);
                    }
                }
            }

            var container = services.Build();

            DependencyResolver.SetDependencyResolver(container);
            return(container);
        }