Skip to content

Instantly share code, notes, and snippets.

@PaulStovell
Last active April 25, 2020 09:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PaulStovell/c2274018a1262506c120752e43db319c to your computer and use it in GitHub Desktop.
Save PaulStovell/c2274018a1262506c120752e43db319c to your computer and use it in GitHub Desktop.
Nevermore marker interfaces & shims
namespace Nevermore.Contracts
{
public interface IDocument : IId, INamed
{
}
}
namespace Nevermore.Contracts
{
public interface IId
{
string Id { get; }
}
}
namespace Nevermore
{
public interface IInitializeRelationalStore
{
void Initialize(IRelationalStore store);
}
}
namespace Nevermore.Contracts
{
public interface INamed
{
string Name { get; }
}
}
using System;
using System.Collections.Generic;
namespace Nevermore.Contracts
{
/// <summary>
/// A case-insensitive collection of unique strings used for holding document ID's.
/// </summary>
public class ReferenceCollection : HashSet<string>, IReadOnlyCollection<string>
{
public ReferenceCollection()
: base(StringComparer.OrdinalIgnoreCase)
{
}
public ReferenceCollection(string singleValue)
: this(new[] { singleValue })
{
}
public ReferenceCollection(IEnumerable<string> values)
: base(values ?? new string[0], StringComparer.OrdinalIgnoreCase)
{
}
public void ReplaceAll(IEnumerable<string> newItems)
{
Clear();
if (newItems == null) return;
foreach (var item in newItems)
{
Add(item);
}
}
public ReferenceCollection Clone()
{
return new ReferenceCollection(this);
}
public override string ToString()
{
return string.Join(", ", this);
}
public static ReferenceCollection One(string item)
{
return new ReferenceCollection { item };
}
}
}
namespace Nevermore
{
public class StoreInitializer : IStoreInitializer
{
readonly IRelationalStore store;
readonly IInitializeRelationalStore[] initializers;
public StoreInitializer(IRelationalStore store, IInitializeRelationalStore[] initializers)
{
this.store = store;
this.initializers = initializers;
}
public void Initialize()
{
foreach (var initializer in initializers)
{
initializer.Initialize(store);
}
}
public void Stop()
{
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment