Ejemplo n.º 1
0
        private static void Simple()
        {
            // 1. Create a new Simple Injector container
            var container = new ServiceContainer();

            //container = container.InterceptWith

            // 2. Configure the container (register)
            container.Register <ICalculator, Calculator>(new PerContainerLifetime());
            container.Register <ICalculator, Calculator>("A", new PerContainerLifetime());

            container.Register <ILogger, ConsoleLogger>(new PerContainerLifetime());

            // Register Decorator (support open generic)
            //container.Decorate<ICalculator, CalculatorDecorator>();
            container.Decorate <ICalculator>();

            ICalculator foo = container.GetInstance <ICalculator>();

            foo.Add(1, 2);
            Console.WriteLine();
            var foos = container.GetInstance <IEnumerable <ICalculator> >();

            foreach (var f in foos)
            {
                f.Add(2, 3);
            }
        }
Ejemplo n.º 2
0
        public void DecoratorsUsingServiceContainer()
        {
            var container = new ServiceContainer();

            container.Register <IOrderNotifier, EMailOrderNotifier>();
            container.Register <IOrderService, OrderServiceWithDependencyInjection>();

            container.Decorate <IOrderNotifier, LoggedOrderNotifierDecorator>();

            var orderService = container.GetInstance <IOrderService>();

            orderService.Save(new Order());
        }
Ejemplo n.º 3
0
        public async Task ShouldInterceptAsyncTaskMethodUsingContainerDecoratedInterceptor()
        {
            bool interceptedTaskMethod = false;
            var  container             = new ServiceContainer();
            Mock <IMethodWithTaskReturnValue> targetMock = new Mock <IMethodWithTaskReturnValue>();

            container.Register(facory => targetMock.Object);
            container.Register <IInterceptor, SampleInterceptor>();
            container.Decorate <IInterceptor>(
                (factory, interceptor) =>
                new LambdaAsyncInterceptor(() => interceptedTaskMethod = true,
                                           null, interceptor));
            container.Intercept(sr => sr.ServiceType == typeof(IMethodWithTaskReturnValue), factory => factory.GetInstance <IInterceptor>());
            var instance = container.GetInstance <IMethodWithTaskReturnValue>();

            await instance.Execute();

            Assert.True(interceptedTaskMethod);
        }
Ejemplo n.º 4
0
        public Initialization(IMod mod)
        {
            var container = new ServiceContainer();

            container.RegisterAssembly(GetType().Assembly);
            container.RegisterInstance(mod.Helper);
            container.RegisterInstance(mod.Monitor);
            container.Register <IHarmonyWrapper, HarmonyWrapper>();
            container.Register <IWrapperFactory, WrapperFactory>();
            container.Decorate <IMonitor, Logger>();
            container.RegisterInstance <IServiceFactory>(container.BeginScope());

            foreach (var service in container.AvailableServices)
            {
                mod.Monitor.Log(service.ServiceType.FullName + " | " + container.CanGetInstance(service.ServiceType, String.Empty), LogLevel.Debug);
            }

            container.GetInstance <IHarmonyPatch>();
            container.GetInstance <IDialogueApi>();
        }