/// <summary>Adds Proof-of-Authority mining to the side chain node.</summary> /// <typeparam name="T">The type of block definition to use.</typeparam> public static IFullNodeBuilder AddPoAMiningCapability <T>(this IFullNodeBuilder fullNodeBuilder) where T : BlockDefinition { fullNodeBuilder.ConfigureFeature(features => { IFeatureRegistration feature = fullNodeBuilder.Features.FeatureRegistrations.FirstOrDefault(f => f.FeatureType == typeof(PoAFeature)); feature.FeatureServices(services => { services.AddSingleton <IPoAMiner, PoAMiner>(); services.AddSingleton <MinerSettings>(); services.AddSingleton <BlockDefinition, T>(); services.AddSingleton <IBlockBufferGenerator, BlockBufferGenerator>(); }); }); return(fullNodeBuilder); }
/// <summary> /// Adds a feature to the node that will allow secertain services to be overridden. /// </summary> /// <param name="fullNodeBuilder">The object used to build the current node.</param> /// <param name="serviceToOverride">Callback routine that will override a given service.</param> /// <typeparam name="T">The feature that the service will be replaced in.</typeparam> /// <returns>The full node builder, enriched with the new component.</returns> public static IFullNodeBuilder OverrideService <T>(this IFullNodeBuilder fullNodeBuilder, Action <IServiceCollection> serviceToOverride) { fullNodeBuilder.ConfigureFeature(features => { IFeatureRegistration feature = features.FeatureRegistrations.FirstOrDefault(f => f.FeatureType == typeof(T)); if (feature != null) { feature.FeatureServices(services => { serviceToOverride(services); }); } }); return(fullNodeBuilder); }
/// <summary> /// Adds a feature to the node that will allow certain services to be overridden. /// </summary> /// <param name="fullNodeBuilder">The object used to build the current node.</param> /// <typeparam name="TFeature">The feature that the service should be added to.</typeparam> /// <typeparam name="T">The serice to add.</typeparam> /// <returns>The full node builder, enriched with the new component.</returns> public static IFullNodeBuilder AddService <TFeature, T>(this IFullNodeBuilder fullNodeBuilder) { fullNodeBuilder.ConfigureFeature(features => { IFeatureRegistration feature = features.FeatureRegistrations.FirstOrDefault(f => f.FeatureType == typeof(TFeature)); if (feature != null) { feature.FeatureServices(services => { services.AddSingleton(typeof(T)); }); } }); return(fullNodeBuilder); }
/// <summary> /// Removes an implementation from a given feature. /// </summary> /// <param name="fullNodeBuilder">The object used to build the current node.</param> /// <typeparam name="T">The service to remove.</typeparam> /// <returns>The full node builder, with the service removed.</returns> public static IFullNodeBuilder RemoveImplementation <T>(this IFullNodeBuilder fullNodeBuilder) { fullNodeBuilder.ConfigureFeature(features => { IFeatureRegistration feature = features.FeatureRegistrations.FirstOrDefault(f => f.FeatureType == typeof(BaseFeature)); if (feature != null) { feature.FeatureServices(services => { ServiceDescriptor service = services.FirstOrDefault(s => s.ImplementationType == typeof(T)); if (service != null) { services.Remove(service); } }); } }); return(fullNodeBuilder); }
/// <summary> /// Replaces a service in a given feature with another implementation. /// </summary> /// <param name="fullNodeBuilder">The object used to build the current node.</param> /// <param name="serviceToOverride">Callback routine that will override a given service.</param> /// <typeparam name="T">The services to be replaced.</typeparam> /// <typeparam name="TFeature">The feature that the service exists in.</typeparam> /// <returns>The full node builder, with the replaced service.</returns> public static IFullNodeBuilder ReplaceService <T, TFeature>(this IFullNodeBuilder fullNodeBuilder, T serviceToOverride) { fullNodeBuilder.ConfigureFeature(features => { IFeatureRegistration feature = features.FeatureRegistrations.FirstOrDefault(f => f.FeatureType == typeof(TFeature)); if (feature != null) { feature.FeatureServices(services => { ServiceDescriptor service = services.FirstOrDefault(s => s.ServiceType == typeof(T)); if (service != null) { services.Remove(service); services.AddSingleton(typeof(T), serviceToOverride); } }); } }); return(fullNodeBuilder); }
/// <summary> /// Substitute the <see cref="IDateTimeProvider"/> for a given feature. /// </summary> /// <typeparam name="T">The feature to substitute the provider for.</typeparam> public static IFullNodeBuilder OverrideDateTimeProviderFor <T>(this IFullNodeBuilder fullNodeBuilder) { fullNodeBuilder.ConfigureFeature(features => { IFeatureRegistration feature = features.FeatureRegistrations.FirstOrDefault(f => f.FeatureType == typeof(T)); if (feature != null) { feature.FeatureServices(services => { ServiceDescriptor service = services.FirstOrDefault(s => s.ServiceType == typeof(IDateTimeProvider)); if (service != null) { services.Remove(service); } services.AddSingleton <IDateTimeProvider, GenerateCoinsFastDateTimeProvider>(); }); } }); return(fullNodeBuilder); }