Skip to content

Instantly share code, notes, and snippets.

@breezhang
Created March 22, 2012 11:20
Show Gist options
  • Save breezhang/2157745 to your computer and use it in GitHub Desktop.
Save breezhang/2157745 to your computer and use it in GitHub Desktop.
autofac 2.6 lazy
##http://nblumhardt.com/wp-content/uploads/2009/12/LazyInAutofac2.zip
using System;
using System.Collections.Generic;
using System.Linq;
using Autofac;
namespace LazyInAutofac2
{
public interface ILogAppender
{
void Write(string text);
}
public interface ILogAppenderMetadata
{
string AppenderName { get; }
}
public class PrinterLogAppender : ILogAppender
{
public PrinterLogAppender()
{
Console.WriteLine("PrinterLogAppender created.");
}
public void Write(string text)
{
Console.WriteLine("[Printer] " + text);
}
}
public class ScreenLogAppender : ILogAppender
{
public ScreenLogAppender()
{
Console.WriteLine("ScreenLogAppender created.");
}
public void Write(string text)
{
Console.WriteLine("[Screen] " + text);
}
}
public class Log
{
readonly IEnumerable<Lazy<ILogAppender, ILogAppenderMetadata>> _appenders;
public Log(IEnumerable<Lazy<ILogAppender, ILogAppenderMetadata>> appenders)
{
_appenders = appenders;
}
public void Write(string destination, string message)
{
var appender = _appenders.First(a => a.Metadata.AppenderName == destination);
appender.Value.Write(message);
}
}
public class Program
{
readonly Log _log;
public Program(Log log)
{
_log = log;
}
public void Run()
{
_log.Write("printer", "Breeeeeep...");
_log.Write("screen", "Zip!");
_log.Write("printer", "Clat tac lac clak.");
Console.ReadKey(true);
}
static void Main(string[] args)
{
var builder = new ContainerBuilder();
// builder.RegisterModule(new LazyDependencyModule()); don't need
builder.RegisterType<Program>();
builder.RegisterType<Log>();
builder.Register(c => new PrinterLogAppender())
.As<ILogAppender>().WithMetadata("AppenderName", "printer");
** // .WithExtendedProperty("AppenderName", "printer");
builder.Register(c => new ScreenLogAppender())
.As<ILogAppender>()
.WithMetadata("AppenderName", "screen"); //**
using (var container = builder.Build())
{
container.Resolve<Program>().Run();
}
}
}
}
@breezhang
Copy link
Author

notice 91,95,84 line

.net 4.0 autofac 2.6 not need import autofac mef

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment