using System; using System.Reflection; using System.Diagnostics; namespace Configuration.IoC { public abstract class InjectAttributeBase : Attribute { internal abstract void inject(MemberInfo mi, InstanceT instance); } [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)] public sealed class InjectAttribute : InjectAttributeBase { internal override void inject(MemberInfo mi, InstanceT instance) { var fi = mi as FieldInfo; Debug.Assert(fi != null); fi.SetValue(instance, ServiceLocator.resolve(fi.FieldType)); } } }