Расширяя ответ от @Eric Hauser, создавая более удобное решение
public abstract class TypedRegistrationConvention<TPluginFamily>
: IRegistrationConvention
{
public virtual void Process(Type type, Registry registry)
{
if (!type.IsConcrete()
|| !type.CanBeCreated()
|| !type.AllInterfaces().Contains(typeof (TPluginFamily)))
return;
ApplyConvention(type, registry);
}
public abstract void ApplyConvention(Type type, Registry registry);
}
С помощью этого установленного базового класса вы можете реализовать соглашения без необходимости обхода кода проверки типа.
public class SingletonConvention<TPluginFamily>
: TypedRegistrationConvention<TPluginFamily>
{
public override void ApplyConvention(Type type, Registry registry)
{
registry.For(typeof (TPluginFamily)).Singleton().Use(type);
}
}
Гораздо проще класс в конце.