Как насчет конструктора для assembly level attribute
?
Пример:
[AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMultiple = true)]
sealed class RegisterToFactoryAttribute : Attribute
{
public Type TypeToRegister { get; set; }
public RegisterToFactoryAttribute(Type typeToRegister)
{
TypeToRegister = typeToRegister;
// Registration code
}
}
Использование:
[assembly:RegisterToFactory(typeof(MyClass))]
- РЕДАКТИРОВАТЬ на атрибутах уровня сборки -
После некоторого исследования я решил, что он будет загружать атрибуты сборки только в том случае, если они запрашиваются:
Пример:
object[] attributes =
Assembly.GetExecutingAssembly().GetCustomAttributes(
typeof(RegisterToFactoryAttribute), false);
или
object[] attributes =
Assembly.GetExecutingAssembly().GetCustomAttributes(false);
Не знаю почему, но если поставить этот код @, загрузка программы должна это сделать.
- EDIT -
Я почти забыл:
Рассматривали ли вы использование MEF
?? Это отличное решение этой проблемы.
Пример: * * тысяча тридцать-один
class MyFactory
{
[ImportMany("MyFactoryExport")]
public List<Object> Registrations { get; set; }
public MyFactory()
{
AssemblyCatalog catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
[Export("MyFactoryExport")]
class MyClass1
{ }
[Export("MyFactoryExport")]
class MyClass2
{ }
[Export("MyFactoryExport")]
class MyClass3
{ }