コード例 #1
0
        public ThingActivatorTest()
        {
            _fixture = new Fixture();
            _service = Substitute.For <IServiceProvider>();
            _option  = new ThingBindingOption();

            _activator = new ThingActivator(_option);
        }
コード例 #2
0
        public static void AddThing(this IServiceCollection services, Action <ThingBindingOption> thingOptions)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (thingOptions == null)
            {
                throw new ArgumentNullException(nameof(thingOptions));
            }

            var option = new ThingBindingOption();

            thingOptions(option);

            services.AddSingleton(option);

            services.AddRouting();
            services.AddWebSockets(options => { });
            services.AddCors();

            services.AddSingleton <ServiceRouteBuilder>();

            services.TryAddSingleton(typeof(ThingMarkService));
            services.TryAddSingleton <IThingActivator, ThingActivator>();
            services.TryAddSingleton <IActionActivator, ActionActivator>();

            services.TryAddSingleton <IJsonSerializerSettings>(service => new JsonSerializerSettings(
                                                                   new JsonSerializerOptions
            {
                WriteIndented       = false,
                IgnoreNullValues    = true,
                DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
            }));

            services.TryAddSingleton <IJsonSerializer, JsonSerializer>();
            services.TryAddSingleton <IJsonSchemaValidator, JsonSchemaValidator>();
            services.TryAddSingleton <IJsonValue, JsonValue>();

            services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.TryAddScoped <IHttpRouteValue, HttpRouteValue>();
            services.TryAddScoped <IHttpBodyWriter, HttpPipeWriter>();
            services.TryAddScoped <IHttpBodyReader, HttpPipeReader>();
            services.TryAddSingleton <IWsUrlBuilder, WsUrlBuilder>();

            services.TryAddSingleton <IDescriptor <Action>, ActionDescriptor>();
            services.TryAddSingleton <IDescriptor <Event>, EventDescriptor>();
            services.TryAddSingleton <IDescriptor <Property>, PropertyDescriptor>();
            services.TryAddSingleton <IDescriptor <Thing>, ThingDescriptor>();
            services.TryAddTransient <IEventCollection, EventCollection>();

            services.AddHostedService <ActionExecutorHostedService>();

            var block = new BufferBlock <Action>();

            services.AddSingleton <ISourceBlock <Action> >(block);
            services.AddSingleton <ITargetBlock <Action> >(block);

            services.AddTransient <WebSocketProcessor>();

            services.TryAddEnumerable(ServiceDescriptor.Transient <IWebSocketAction, AddEventSubscription>());
            services.TryAddEnumerable(ServiceDescriptor.Transient <IWebSocketAction, RequestAction>());
            services.TryAddEnumerable(ServiceDescriptor.Transient <IWebSocketAction, SetThingProperty>());
        }
コード例 #3
0
 public ServiceRouteBuilder(ThingBindingOption option)
 {
     _option = option;
 }
コード例 #4
0
 public ThingActivator(ThingBindingOption option)
 {
     _option = option;
 }