Ejemplo n.º 1
0
        public void RegisterComponent(IKernel kernel, IHandler handler)
        {
            var model = handler.ComponentModel;

            Type stateManagerDependencyType = null;
            var  stateManagerConfig         = model.GetProperty <ReliableStateManagerConfiguration>(typeof(ReliableStateManagerConfiguration));

            if (!(stateManagerConfig == null || model.TryGetDependencyType <ReliableStateManager>(out stateManagerDependencyType)))
            {
                throw new ComponentRegistrationException($"Failed to register StatefulService {model.Implementation}. Could not locate a valid dependency input that accepts {typeof(ReliableStateManager)} when an explicit state manager configuration is specified.");
            }

            var serviceResolver = new StatefulServiceResolver(kernel, model.Implementation)
            {
                StateManagerConfiguration  = stateManagerConfig,
                StateManagerDependencyType = stateManagerDependencyType
            };

            ServiceRuntime.RegisterServiceAsync(
                handler.GetProperty <string>(FacilityConstants.ServiceTypeNameKey),
                serviceResolver.Resolve)
            .GetAwaiter()
            .GetResult();

            ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, model.Implementation.Name);
        }
Ejemplo n.º 2
0
        public void ResolveTest()
        {
            using (var container = new WindsorContainer())
            {
                var resolver = new StatefulServiceResolver(container.Kernel, typeof(TestStatefulService))
                {
                };

                var context = MockStatefulServiceContextFactory.Default;

                Assert.Throws <ComponentNotFoundException>(() => resolver.Resolve(context));

                container.Register(Component.For <TestStatefulService>().LifestyleTransient());

                var service = resolver.Resolve(context);

                Assert.NotNull(service);
                var testService = Assert.IsType <TestStatefulService>(service);

                Assert.Null(testService.ReliableStateManagerReplica);

                var stateManagerConfig         = new ReliableStateManagerConfiguration();
                var stateManagerDependencyType = typeof(IReliableStateManagerReplica);

                resolver = new StatefulServiceResolver(container.Kernel, typeof(TestStatefulService))
                {
                    StateManagerConfiguration  = stateManagerConfig,
                    StateManagerDependencyType = stateManagerDependencyType
                };

                service = resolver.Resolve(context);

                Assert.NotNull(service);
                testService = Assert.IsType <TestStatefulService>(service);

                Assert.NotNull(testService.ReliableStateManagerReplica);
            }
        }