Add data source

This commit is contained in:
Ryan Nowak 2017-09-26 10:17:48 -07:00
parent 7685e17e80
commit eeebefee1b
3 changed files with 57 additions and 3 deletions

View File

@ -30,6 +30,8 @@ namespace Microsoft.AspNetCore.Dispatcher
}
}
public virtual DispatcherDataSource DataSource { get; set; }
public virtual IList<Endpoint> Endpoints
{
get
@ -56,11 +58,11 @@ namespace Microsoft.AspNetCore.Dispatcher
}
}
public IChangeToken ChangeToken => NullChangeToken.Singleton;
public IChangeToken ChangeToken => DataSource?.ChangeToken ?? NullChangeToken.Singleton;
IReadOnlyList<Address> IAddressCollectionProvider.Addresses => _addresses;
IReadOnlyList<Address> IAddressCollectionProvider.Addresses => ((IAddressCollectionProvider)DataSource)?.Addresses ?? _addresses ?? (IReadOnlyList<Address>)Array.Empty<Address>();
IReadOnlyList<Endpoint> IEndpointCollectionProvider.Endpoints => _endpoints;
IReadOnlyList<Endpoint> IEndpointCollectionProvider.Endpoints => ((IEndpointCollectionProvider)DataSource)?.Endpoints ?? _endpoints ?? (IReadOnlyList<Endpoint>)Array.Empty<Endpoint>();
public virtual async Task InvokeAsync(HttpContext httpContext)
{

View File

@ -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<Address> GetAddesses();
protected abstract IReadOnlyList<Endpoint> GetEndpoints();
IReadOnlyList<Address> IAddressCollectionProvider.Addresses => GetAddesses();
IReadOnlyList<Endpoint> IEndpointCollectionProvider.Endpoints => GetEndpoints();
}
}

View File

@ -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<Address> _addresses;
private readonly List<Endpoint> _endpoints;
public SimpleDispatcherDataSource()
{
_addresses = new List<Address>();
_endpoints = new List<Endpoint>();
}
public override IChangeToken ChangeToken { get; } = NullChangeToken.Singleton;
public IList<Address> Addresses => _addresses;
public IList<Endpoint> Endpoint { get; } = new List<Endpoint>();
protected override IReadOnlyList<Address> GetAddesses() => _addresses;
protected override IReadOnlyList<Endpoint> GetEndpoints() => _endpoints;
}
}