View RabbitMqQueueSubscriptionCreator.cs
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using Foo.Messaging.Abstractions;
View Program.cs
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
namespace ConsoleApp7
{
public class MainProgressReporter : IProgress<double>
{
View CopyFileEx.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp6
View good.csproj
<TargetFrameworks>
<Framework name="net451" />
<Framework name="netcoreapp1.0">
<Dependencies>
<PackageReference Include="Microsoft.NETCore.App" Version="1.1.0" />
</Dependencies>
</Framework>
</TargetFrameworks>
View dummy.fs
// getProducts connects to DB to retrieve the products
// getRevenue connects to DB to retrieve revenue based on the product attributes
// convertRevenue and calculateProfit are pure functions
// saveProfit writes the calculated profit to a DB
getProducts 1 |>
getRevenue |>
convertRevenue |>
calculateProfit |>
saveProfit
View EntityValueObjectAggregateAggregateRoot.md

Value Object

An Address is a good example of a value object. Both addresses with the same attributes will always be the same.

Entity

A User is a good example for an entity. It has an identity and even if two different users have same attributes, it will not be a match.

Aggregate

View NonNullableOfT.cs
using System;
/// <summary>
/// Wraps a reference type value which should not be null.
/// </summary>
/// <typeparam name="T"></typeparam>
public struct NonNullable<T> where T : class
{
private readonly T _value;
View program.cs
using System;
using System.IO;
using System.Linq;
namespace ConsoleApplication4
{
// see: http://stackoverflow.com/a/6371533/463785
// see: http://stackoverflow.com/questions/1281620/checking-for-directory-and-file-write-permissions-in-net
class Program
View Neo4jSample.cs
// Based on:
// - Getting Started with Neo4j in .NET with Neo4jClient Library: http://www.tugberkugurlu.com/archive/getting-started-with-neo4j-in--net-with-neo4jclient-library
// Other links:
// - Neo4j: http://neo4j.com/
// - Neo4j .NET Client: https://github.com/Readify/Neo4jClient
// - Cypher query language: http://neo4j.com/developer/cypher-query-language/
public class Agency { public string Name { get; set; } }
public class Person { public string Name { get; set; } }
View Utils.fs
let randomString len =
let chars = "ABCDEFGHIJKLMNOPQRSTUVWUXYZ0123456789"
let charsLength = chars.Length
let random = System.Random()
let randomChars = [|for i in 0..len -> chars.[random.Next(charsLength)]|]
new System.String(randomChars)