Skip to content

Instantly share code, notes, and snippets.

View cerebrate's full-sized avatar

Alistair Young cerebrate

View GitHub Profile
@cerebrate
cerebrate / gist:4707957
Created February 4, 2013 16:57
Checking for a dirty context using entity framework.
/// <summary>
/// Detect whether the context is dirty (i.e., there are changes in entities in memory that have
/// not yet been saved to the database).
/// </summary>
/// <param name="context">The database context to check.</param>
/// <returns>True if dirty (unsaved changes); false otherwise.</returns>
public static bool IsDirty(this DbContext context)
{
Contract.Requires<ArgumentNullException>(context != null);
@cerebrate
cerebrate / gist:4708009
Created February 4, 2013 17:04
Raising to a power using an extension method.
public static int Exp(this int x, int y)
{
int result = 1;
while (y > 0)
{
if ((y & 1) != 0)
{
result *= x;
}
y >>= 1;
@cerebrate
cerebrate / gist:5030215
Created February 25, 2013 14:40
The so-obvious-you-d-think-it'd-be-in-the-library value converter used in binding a control to something-a-specific-bit-less-than-the-size-of-its-parent.
public class SubtractConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return (double)value - System.Convert.ToDouble(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (double)value + System.Convert.ToDouble(parameter);
@cerebrate
cerebrate / gist:5219157
Created March 22, 2013 05:28
Forcing a WPF data-binding to refresh
BindingOperations.GetBindingExpressionBase(dependencyObject, dependencyProperty).UpdateTarget();
@cerebrate
cerebrate / CallMeMaybeAspect.cs
Created September 3, 2013 17:41
Testing with PostSharp: make a method just the right amount of unreliable.
/// <summary>
/// An aspect for use in testing of variable-reliability conditions, by succeeding in calling the
/// underlying method only part of the time, returning an exception the rest of the time.
/// </summary>
[Serializable]
public class CallMeMaybeAspect : MethodInterceptionAspect
{
private readonly Type exceptionType;
private readonly double probability;
@cerebrate
cerebrate / SingletonConstraint.cs
Created September 5, 2013 13:03
PostSharp: Doing Singletons Right
namespace ArkaneSystems.Arkane.Aspects
{
/// <summary>
/// A constraint which verifies that the class to which it is applied obeys the Singleton pattern
/// we use.
/// </summary>
/// <remarks>
/// The singleton pattern is as follows:
/// private static readonly Lazy{$CLASS$} lazy = new Lazy{$CLASS$} (() => new $CLASS$());
/// public static $CLASS$ Instance { get { return lazy.Value; } }
@cerebrate
cerebrate / gist:6695088
Created September 25, 2013 04:11
Today's faulty, pain-in-the-ass code.
<xctk:EditorDefinitionCollection x:Key="StandardPropertyEditors" x:Shared="False">
<xctk:EditorTemplateDefinition TargetProperties="{arkane:Nullable TypeName=system:Boolean}" >
<xctk:EditorTemplateDefinition.EditingTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Value}" IsThreeState="True" />
</DataTemplate>
</xctk:EditorTemplateDefinition.EditingTemplate>
</xctk:EditorTemplateDefinition>
<xctk:EditorTemplateDefinition TargetProperties="{arkane:Nullable system:DateTime}">
<xctk:EditorTemplateDefinition.EditingTemplate>
@cerebrate
cerebrate / gist:6695095
Created September 25, 2013 04:12
The markup extension that's supposed to make today's faulty, pain-in-the-ass code work.
/// <summary>
/// XAML markup extension to make it possible to reference nullable types.
/// </summary>
[MarkupExtensionReturnType (typeof (Type))]
public class NullableExtension : TypeExtension
{
/// <summary>
/// Initializes a new instance of the NullableExtension class.
/// </summary>
public NullableExtension ()
@cerebrate
cerebrate / ApartmentAspect.cs
Last active January 3, 2016 15:29
ApartmentAspect for PostSharp.
namespace ArkaneSystems.Arkane.Aspects
{
/// <summary>
/// An aspect to execute a function on a thread in the given COM apartment state.
/// </summary>
[Serializable]
public sealed class ApartmentAspect : MethodInterceptionAspect
{
private readonly ApartmentState desiredState;
private Exception returnException;
@cerebrate
cerebrate / UnlessDisposed
Created January 21, 2014 18:56
Automatically implement the "if disposed, throw exception" pattern.
namespace ArkaneSystems.Arkane.Aspects
{
/// <summary>
/// An aspect which blocks calls to all public methods of a class implementing <see cref="IDisposable"/> once the class has
/// been disposed, instead throwing <see cref="ObjectDisposedException"/>. The class upon which this aspect is placed must
/// use the common pattern in which a private boolean field named 'disposed' is used to hold the disposed state.
/// </summary>
/// <remarks>
/// Private methods, static methods, and finalizers can still run when the class is disposed, as they may
/// be required for cleanup.