Skip to content

IConfiguration

Martin Halliday edited this page Jul 14, 2016 · 4 revisions

This interface is used to provide configuration data to middleware. The interface only defines a single method with this signature:

    IDisposable Register<T>(
        string path, 
        Action<T> onChangeAction, 
        T defaultValue = default(T));

Below is an example of how to use this interface:

[Serializable]
internal class DocumenterConfiguration
{
    public string Path { get; set; }
    public bool Enabled { get; set; }
    public string RequiredPermission { get; set; }

    public DocumenterConfiguration()
    {
        Path = "/owin/endpoints";
        Enabled = true;
    }
}

public class DocumenterMiddleware: IMiddleware<object>, IConfigurable, IDisposable
{
    private IDisposable _configurationRegistration;
    private DocumenterConfiguration _configuration = new DocumenterConfiguration();

    void IConfigurable.Configure(IConfiguration configuration, string path)
    {
        _configurationRegistration = configuration.Register(
            path, cfg => _configuration = cfg, new DocumenterConfiguration());
    }

    void IDisposable.Dispose()
    {
        _configurationRegistration.Dispose();
    }
}

Below is an example implementation of this interface. This implementation uses Urchin.

using System;
using OwinFramework.Interfaces.Builder;
using Urchin.Client.Interfaces;

namespace OwinFramework.Configuration.Urchin
{
    /// <summary>
    /// This class implements the Owin Framework IConfiguration interface using the Urchin client.
    /// If you choose to use this method of configuring your middleware you must add the Urchin.Client
    /// NuGet package to your application and initialize it. See Urchin documentation for more detail.
    /// </summary>
    public class UrchinConfiguration: IConfiguration
    {
        private readonly IConfigurationStore _configurationStore;

        public UrchinConfiguration(IConfigurationStore configurationStore)
        {
            _configurationStore = configurationStore;
        }

        public IDisposable Register<T>(string path, Action<T> onChangeAction, T defaultValue)
        {
            return _configurationStore.Register(path, onChangeAction, defaultValue);
        }
    }
}