From eeebefee1bfcb37d16f7b4fcc4a8b5885faed3c7 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Tue, 26 Sep 2017 10:17:48 -0700 Subject: [PATCH] Add data source --- .../DispatcherBase.cs | 8 +++-- .../DispatcherDataSource.cs | 21 +++++++++++++ .../SimpleDispatcherDataSource.cs | 31 +++++++++++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/Microsoft.AspNetCore.Dispatcher/DispatcherDataSource.cs create mode 100644 src/Microsoft.AspNetCore.Dispatcher/SimpleDispatcherDataSource.cs diff --git a/src/Microsoft.AspNetCore.Dispatcher/DispatcherBase.cs b/src/Microsoft.AspNetCore.Dispatcher/DispatcherBase.cs index e655828e01..e7cedc2abf 100644 --- a/src/Microsoft.AspNetCore.Dispatcher/DispatcherBase.cs +++ b/src/Microsoft.AspNetCore.Dispatcher/DispatcherBase.cs @@ -30,6 +30,8 @@ namespace Microsoft.AspNetCore.Dispatcher } } + public virtual DispatcherDataSource DataSource { get; set; } + public virtual IList Endpoints { get @@ -56,11 +58,11 @@ namespace Microsoft.AspNetCore.Dispatcher } } - public IChangeToken ChangeToken => NullChangeToken.Singleton; + public IChangeToken ChangeToken => DataSource?.ChangeToken ?? NullChangeToken.Singleton; - IReadOnlyList
IAddressCollectionProvider.Addresses => _addresses; + IReadOnlyList
IAddressCollectionProvider.Addresses => ((IAddressCollectionProvider)DataSource)?.Addresses ?? _addresses ?? (IReadOnlyList
)Array.Empty
(); - IReadOnlyList IEndpointCollectionProvider.Endpoints => _endpoints; + IReadOnlyList IEndpointCollectionProvider.Endpoints => ((IEndpointCollectionProvider)DataSource)?.Endpoints ?? _endpoints ?? (IReadOnlyList)Array.Empty(); public virtual async Task InvokeAsync(HttpContext httpContext) { diff --git a/src/Microsoft.AspNetCore.Dispatcher/DispatcherDataSource.cs b/src/Microsoft.AspNetCore.Dispatcher/DispatcherDataSource.cs new file mode 100644 index 0000000000..2767e408dc --- /dev/null +++ b/src/Microsoft.AspNetCore.Dispatcher/DispatcherDataSource.cs @@ -0,0 +1,21 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using Microsoft.Extensions.Primitives; + +namespace Microsoft.AspNetCore.Dispatcher +{ + public abstract class DispatcherDataSource : IAddressCollectionProvider, IEndpointCollectionProvider + { + public abstract IChangeToken ChangeToken { get; } + + protected abstract IReadOnlyList
GetAddesses(); + + protected abstract IReadOnlyList GetEndpoints(); + + IReadOnlyList
IAddressCollectionProvider.Addresses => GetAddesses(); + + IReadOnlyList IEndpointCollectionProvider.Endpoints => GetEndpoints(); + } +} diff --git a/src/Microsoft.AspNetCore.Dispatcher/SimpleDispatcherDataSource.cs b/src/Microsoft.AspNetCore.Dispatcher/SimpleDispatcherDataSource.cs new file mode 100644 index 0000000000..4fa5b6ff5a --- /dev/null +++ b/src/Microsoft.AspNetCore.Dispatcher/SimpleDispatcherDataSource.cs @@ -0,0 +1,31 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Primitives; + +namespace Microsoft.AspNetCore.Dispatcher +{ + public class SimpleDispatcherDataSource : DispatcherDataSource + { + private readonly List
_addresses; + private readonly List _endpoints; + + public SimpleDispatcherDataSource() + { + _addresses = new List
(); + _endpoints = new List(); + } + + public override IChangeToken ChangeToken { get; } = NullChangeToken.Singleton; + + public IList
Addresses => _addresses; + + public IList Endpoint { get; } = new List(); + + protected override IReadOnlyList
GetAddesses() => _addresses; + + protected override IReadOnlyList GetEndpoints() => _endpoints; + } +}