Skip to content

Instantly share code, notes, and snippets.

@cairey
cairey / MouseEnterIntent.cs
Created August 26, 2011 10:56
Just like Hover Intent in JQuery, this is Hover Intent Behavior for Silverlight. See "Read Me" below.
public class MouseEnterIntent
{
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(MouseEnterIntent), new PropertyMetadata(OnSetCommandCallback));
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(MouseEnterIntent), new PropertyMetadata(OnSetCommandParameterCallback));
public static readonly DependencyProperty MouseEnterIntentCommandBehaviorProperty =
DependencyProperty.RegisterAttached("HoverIntentCommandBehavior", typeof(MouseEnterIntentCommandBehavior), typeof(MouseEnterIntent), null);
@cairey
cairey / DragOverControlToCommandBehavior.cs
Created July 20, 2012 15:07
Drag over control to command bahvior
public class DragOverControlToCommandBehavior : CommandBehaviorBase<Control>
{
public DragOverControlToCommandBehavior(Control element)
: base(element)
{
element.AllowDrop = true;
element.DragOver += ElementDragOver;
}
private void ElementDragOver(object sender, DragEventArgs e)
@cairey
cairey / CommandHandlerFactory.cs
Created July 20, 2012 15:13
Command pattern using MEF
[Export(typeof(ICommandHandlerFactory))]
public class CommandHandlerFactory : ICommandHandlerFactory
{
private readonly IEnumerable<ICommandHandler> _commandHandlers;
[ImportingConstructor]
public CommandHandlerFactory([ImportMany]IEnumerable<ICommandHandler> commandHandlers)
{
_commandHandlers = commandHandlers;
}
@cairey
cairey / LogInterceptor.cs
Created July 20, 2012 15:22
Aspect Oriented Programming with MEF using the interceptors. Compose an interceptor catalog in the example below
public class LogInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
if(invocation.TargetType.GetCustomAttributes(typeof(LogMethodCallsAttribute), true).Length > 0)
{
var loggerFacade = MefInstanceProvider.Container.GetExportedValue<ILoggerFacade>();
loggerFacade.Log(FormatMethodCall(invocation, ApplicationStates.Started), Category.Info, Priority.Low);
invocation.Proceed();
@cairey
cairey / Literal.cs
Created October 19, 2012 09:05
Literal of an expression at runtime. Handy for property change notifications i.e Literal.Of(() => MyProperty)
public static class Literal
{
private static string GetMemberName(Expression expression)
{
switch (expression.NodeType)
{
case ExpressionType.MemberAccess:
var memberExpression = (MemberExpression)expression;
var supername = GetMemberName(memberExpression.Expression);
@cairey
cairey / UnitOfWorkBehaviorAttribute.cs
Created October 19, 2012 09:12
WCF Unit of work Behavior
public class UnitOfWorkBehaviorAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute
{
public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
{ }
public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
{
foreach(var operation in dispatchRuntime.EndpointDispatcher.DispatchRuntime.Operations)
{
operation.CallContextInitializers.Add(new PCMUnitOfWorkCallContextInitializer());
@cairey
cairey / gist:3917111
Created October 19, 2012 09:14
MSTestContrib BDD Extensions
namespace MSTestContrib.Specifications
{
public static class BDDExtensions
{
public static ThenGrammar Then(this WhenGrammar whenGrammar, string description, Action<SpecificationContext> implementation)
{
Func<SpecificationContext, bool> implementationWithReturnTrue = (x) =>
{
implementation(x);
return true;
@cairey
cairey / gist:4563456
Created January 18, 2013 09:40
iTextSharp PdfStamper stream to MVC File Result
public virtual ActionResult PdfDownloadTravel()
{
var reader = new PdfReader(Server.MapPath("~/pdf/travel_insurance_card.pdf"));
var outputPdfStream = new MemoryStream();
var stamper = new PdfStamper(reader, outputPdfStream) { FormFlattening = true, FreeTextFlattening=true };
var form = stamper.AcroFields;
form.SetField("Name", "");
form.SetField("number", "500-0000324");
@cairey
cairey / VSSolutionInspection.tt
Created May 1, 2013 15:05
Inspect the Visual Studio solution and project settings using T4 template code gen.
<#@ template language="C#" debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core.dll" #>
<#@ assembly name="EnvDTE" #>
<#@ Assembly Name="System.Windows.Forms.dll" #>
<#@ Assembly name="System.Configuration"#>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Linq" #>
@cairey
cairey / gist:5501024
Last active August 20, 2021 12:07
Programmatically start IIS Express from code.
public static class IISExpress
{
private static readonly List<string> sites = new List<string>();
private static readonly List<string> paths = new List<string>();
public static void StartIISExpress(string site, int port = 7329)
{
if(!sites.Contains(site.ToLower()))
sites.Add(site.ToLower());
else return;