New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

Composing seemingly unrelated parts

27 Views
Copy Code Show/Hide Line Numbers
public class LoggerRegistry : PartRegistry
{
    public LoggerRegistry()
    {
        Part<PartConvention>()
            .ForTypesMatching(x => x.GetInterfaces().Contains(typeof(ILogger)))
            .Exports(x => x.Export<ExportConvention>()
                .ContractType<ILogger>()
                .ContractName<ILogger>()
                .Members(m => new[] { m }))
            .Imports(x => x.Import<ImportConvention>()
                .ContractName("Value")
                .ContractType(t => typeof(int))
                .Members(m => m.GetMember("Values")));
 
        Part<PartConvention>()
            .ForTypesMatching(x => x.GetProperties().Where(p => p.Name.Equals("Value")).Any())
            .Exports(x => x.Export<ExportConvention>()
                .ContractName("Value")
                .ContractType(t => ((PropertyInfo)t).PropertyType)
                .Members(m => m.GetProperties().Where(p => p.Name.Equals("Value")).Cast<MemberInfo>().ToArray()));
    }
}
 
public interface ILogger
{
    void Add(string message);
}
 
public class Foo
{
    public Foo()
    {
        this.Value = 1;
    }
 
    public int Value { get; set; }
}
 
public class Bar
{
    public Bar()
    {
        this.Value = 2;
    }
 
    public int Value { get; set; }
}
 
public class NullLogger : ILogger
{
    public int[] Values { get; set; }
 
    public void Add(string message)
    {
    }
}
by TheCodeJunkie
  February 08, 2010 @ 2:38pm

Add a comment


Report Abuse
brought to you by:
West Wind Techologies


If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate