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