Language: C#
Composing seemingly unrelated parts
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) { } }
Report Abuse
Subscribe
Discuss
What's new
What is it
New Snippet
Recent Snippets
My Snippets
Web Code
Search

