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); } }
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()); }
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); }
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>(); }