Skip to content

Instantly share code, notes, and snippets.

Avatar
🏠
Working from home

David Fowler davidfowl

🏠
Working from home
View GitHub Profile
@davidfowl
davidfowl / server.cs
Last active Mar 1, 2021 — forked from DamianEdwards/server.cs
Simplified ASP.NET Core app exploration
View server.cs
#!/usr/bin/env dotnet run
var builder = WebApplication.CreateBuilder(args);
var config = builder.Configuration;
var connString = config["connectionString"] ?? "Data Source=todos.db";
builder.AddDbContext<TodoDb>(options => options.UseSqlite(connString));
builder.AddSqlite<Todo>(connString) // Higher level API perhaps?
var app = builder.Build();
View ConcurrentDictionaryExtensions.cs
using System;
using System.Threading.Tasks;
namespace System.Collections.Concurrent
{
public static class ConcurrentDictionaryExtensions
{
/// <summary>
/// Provides an alternative to <see cref="ConcurrentDictionary{TKey, TValue}.GetOrAdd(TKey, Func{TKey, TValue})"/> that disposes values that implement <see cref="IDisposable"/>.
/// </summary>
View Solution.cs
var t1 = DoFooAsync(obj);
var t2 = DoBarAsync(obj);
var t = await WhenAnySuccessOrAllFail(t1, t2);
async Task WhenAnySuccessOrAllFail(params Task[] tasks)
{
var remaining = new List<Task>(tasks);
while (remaining.Count > 0)
@davidfowl
davidfowl / trie.js
Last active Dec 19, 2020 — forked from sajclarke/trie.js
Building a trie using Javascript.
View trie.js
const routes = ['/foo/blah/bar', '/foo', '/products']
function buildTrie(routes) {
var root = { path: {} };
for (var route of routes) {
var node = root;
for (var segment of route.split('/')) {
if(segment.length === 0) continue;
if (node.path[segment] == null) {
node.path[segment] = { path: {} };
View LazyControllers.cs
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Loader;
using System.Threading;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
@davidfowl
davidfowl / DynamicController.cs
Last active Dec 1, 2020
Dynamically loading a controller
View DynamicController.cs
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Infrastructure;
View Deadlock.cs
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
namespace ConsoleApp38
{
class Program
{
[ThreadStatic]
@davidfowl
davidfowl / linker.xml
Created Aug 2, 2020
Linker root file for empty web project
View linker.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- See: https://github.com/mono/linker/blob/master/src/linker/README.md#syntax-of-xml-descriptor -->
<linker>
<assembly fullname="Microsoft.Extensions.Hosting">
<type fullname="Microsoft.Extensions.Hosting.Internal.ApplicationLifetime" />
<type fullname="Microsoft.Extensions.Hosting.Internal.ConsoleLifetime" />
<type fullname="Microsoft.Extensions.Hosting.ConsoleLifetimeOptions" />
<type fullname="Microsoft.Extensions.Hosting.Internal.Host" />
<type fullname="Microsoft.Extensions.Hosting.HostOptions" />
</assembly>
View lookbrad.cs
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp25
{
class Program
{
static async Task Main(string[] args)
View oidc.cs
services.AddOptions<OpenIdConnectOptions>()
.Configure<IOIDCPipelineStore, IHttpContextAccessor>((oidcPipelineStore, accessor, options) =>
{
options.ProtocolValidator = new MyOpenIdConnectProtocolValidator(oidcPipelineStore, accessor)
{
RequireTimeStampInNonce = false,
RequireStateValidation = false,
RequireNonce = true,
NonceLifetime = TimeSpan.FromMinutes(15)
};