private static void RegisterActUsageServices(IServiceCollection container)
        {
            container.AddScoped <IActUsageHandlerSelector>(serviceProvider =>
            {
                var handlers        = serviceProvider.GetServices <IActUsageHandler>();
                var handlersArray   = handlers.ToArray();
                var handlerSelector = new ActUsageHandlerSelector(handlersArray);
                return(handlerSelector);
            });
            container.AddScoped <IActUsageHandler>(serviceProvider =>
            {
                var perkResolver = serviceProvider.GetRequiredService <IPerkResolver>();
                var randomSource = serviceProvider.GetRequiredService <ITacticalActUsageRandomSource>();
                var handler      = new ActorActUsageHandler(perkResolver, randomSource);
                ConfigurateActorActUsageHandler(serviceProvider, handler);
                return(handler);
            });
            container.AddScoped <IActUsageHandler, StaticObjectActUsageHandler>();
            container.AddScoped <ITacticalActUsageService>(serviceProvider =>
            {
                var randomSource       = serviceProvider.GetRequiredService <ITacticalActUsageRandomSource>();
                var actHandlerSelector = serviceProvider.GetRequiredService <IActUsageHandlerSelector>();
                var sectorManager      = serviceProvider.GetRequiredService <ISectorManager>();

                var tacticalActUsageService = new TacticalActUsageService(randomSource, sectorManager, actHandlerSelector);

                ConfigurateTacticalActUsageService(serviceProvider, tacticalActUsageService);

                return(tacticalActUsageService);
            });
        }
        public void GetHandler_TargetInheritedByBase_ReturnsHandler()
        {
            // ARRANGE

            var testHandlerMock = new Mock <IActUsageHandler>();

            testHandlerMock.SetupGet(x => x.TargetType).Returns(typeof(ITest1));
            var testHandler = testHandlerMock.Object;

            var selector = new ActUsageHandlerSelector(new IActUsageHandler[] { testHandler });

            var targetObject = new Test2();

            // ACT

            var factHandler = selector.GetHandler(targetObject);

            // ASSERT

            factHandler.Should().Be(testHandler);
        }
        public void GetHandler_IsNotHandleTarget_ThrowsExceptionHandlerNotFound()
        {
            // ARRANGE

            var testHandlerMock = new Mock <IActUsageHandler>();

            testHandlerMock.SetupGet(x => x.TargetType).Returns(typeof(ITest1));
            var testHandler = testHandlerMock.Object;

            var selector = new ActUsageHandlerSelector(new IActUsageHandler[] { testHandler });

            var targetObject = new NotHandleTarget();

            // ACT
            Action act = () =>
            {
                selector.GetHandler(targetObject);
            };

            // ASSERT

            act.Should().Throw <HandlerNotFoundException>();
        }
示例#4
0
        public static void RegisterActUsageService(this DiContainer diContainer)
        {
            diContainer.Bind <ITacticalActUsageService>().To <TacticalActUsageService>().AsSingle()
            .OnInstantiated <TacticalActUsageService>((c, service) =>
            {
                var equipmentDurableService     = diContainer.Resolve <IEquipmentDurableService>();
                service.EquipmentDurableService = equipmentDurableService;
            });

            diContainer.Bind <ITacticalActUsageRandomSource>().To <TacticalActUsageRandomSource>().AsSingle();

            diContainer.Bind <IActUsageHandlerSelector>().FromMethod(() =>
            {
                var handlers = diContainer.ResolveAll <IActUsageHandler>().ToArray();
                var service  = new ActUsageHandlerSelector(handlers);
                return(service);
            }).AsSingle();

            diContainer.Bind <IActUsageHandler>().To <ActorActUsageHandler>().AsSingle()
            .OnInstantiated <ActorActUsageHandler>((contex, service) =>
            {
                var equipmentDurableService     = diContainer.Resolve <IEquipmentDurableService>();
                service.EquipmentDurableService = equipmentDurableService;

                var actorInteractionBus     = diContainer.Resolve <IActorInteractionBus>();
                service.ActorInteractionBus = actorInteractionBus;

                var playerEventLogService     = diContainer.Resolve <IPlayerEventLogService>();
                service.PlayerEventLogService = playerEventLogService;

                var scoreManager     = diContainer.Resolve <IScoreManager>();
                service.ScoreManager = scoreManager;
            });

            diContainer.Bind <IActUsageHandler>().To <StaticObjectActUsageHandler>().AsSingle();
        }