Skip to content

Instantly share code, notes, and snippets.

@mattwcole
Last active August 29, 2015 14:23
Show Gist options
  • Save mattwcole/65a8d5a1adb8179932ba to your computer and use it in GitHub Desktop.
Save mattwcole/65a8d5a1adb8179932ba to your computer and use it in GitHub Desktop.
Autofac Binding Examples
using System;
using Autofac;
namespace LinkedList
{
public class Program
{
static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterType<LastActivityUpdater>();
builder.RegisterType<AnonymousUserLastActivityUpdater>();
builder.Register(c => new UserService(c.Resolve<LastActivityUpdater>()));
builder.Register(c => new AnonymousUserService(c.Resolve<AnonymousUserLastActivityUpdater>()));
using (var container = builder.Build())
{
var userService = container.Resolve<UserService>();
var anonymousUserService = container.Resolve<AnonymousUserService>();
}
Console.ReadKey();
}
}
public class UserService
{
public UserService(ILastActivityUpdater updater)
{
Console.WriteLine("UserService got an instance of " + updater.GetType().Name);
}
}
public class AnonymousUserService
{
public AnonymousUserService(ILastActivityUpdater updater)
{
Console.WriteLine("AnonymousUserService got an instance of " + updater.GetType().Name);
}
}
public interface ILastActivityUpdater
{
}
public class LastActivityUpdater : ILastActivityUpdater
{
}
public class AnonymousUserLastActivityUpdater : ILastActivityUpdater
{
}
}
using System;
using Autofac;
namespace LinkedList
{
public class Program
{
static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterType<LastActivityUpdater>()
.Named<ILastActivityUpdater>("defaultUpdater");
builder.RegisterType<AnonymousUserLastActivityUpdater>()
.Named<ILastActivityUpdater>("anonymousUpdater");
builder.RegisterDecorator<ILastActivityUpdater>(
(c, inner) => new LastActivityUpdaterDecorator(inner), "defaultUpdater");
builder.Register(c => new UserService(c.Resolve<ILastActivityUpdater>()));
builder.Register(c => new AnonymousUserService(c.ResolveNamed<ILastActivityUpdater>("anonymousUpdater")));
using (var container = builder.Build())
{
var userService = container.Resolve<UserService>();
var anonymousUserService = container.Resolve<AnonymousUserService>();
}
Console.ReadKey();
}
}
public class UserService
{
public UserService(ILastActivityUpdater updater)
{
Console.WriteLine("UserService got an instance of " + updater.GetType().Name);
}
}
class AnonymousUserService
{
public AnonymousUserService(ILastActivityUpdater updater)
{
Console.WriteLine("AnonymousUserService got an instance of " + updater.GetType().Name);
}
}
public interface ILastActivityUpdater
{
}
public class LastActivityUpdater : ILastActivityUpdater
{
}
public class AnonymousUserLastActivityUpdater : ILastActivityUpdater
{
}
public class LastActivityUpdaterDecorator : ILastActivityUpdater
{
public LastActivityUpdaterDecorator(ILastActivityUpdater updater)
{
Console.WriteLine("LastActivityUpdaterDecorator got an instance of " + updater.GetType().Name);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment