Так что у меня этот классВызывать статические инициализаторы типа посредством отражения возможно
public static class MyClass
{
static MyClass()
{
...
}
}
который не имеет методов, полей и свойств. Все, что он делает, это обработчики подключений к статическим событиям, определенным в другом месте.
Поскольку инициализатор типа никогда не вызывается, поскольку статический класс никогда не обращается к действительности, события не подключаются.
Таким образом, я надеялся, что сможет вызвать инициализатор типа через отражение ala typeof(MyClass).TypeInitializer().Invoke(...)
, которое взрывается, с исключением того, что MyClass
является абстрактным классом.
В конечном итоге приложение будет иметь другие статические классы с тем же форматом, который соответствует бизнес-правилам. Прежде чем что-либо будет сохранено в БД, будут запущены статические события, соответствующие типу сохраняемого объекта. Поэтому, если то, что я хочу сделать, оказывается невозможным, любые рекомендации по рефакторингу должны будут следовать этой структуре.
EDIT:
я, возможно, не было совершенно ясно, что именно я пытаюсь сделать. В основном у меня есть уровень данных, где вы можете инициализировать экземпляр DataContext
, а затем, когда вызывается SubmitChanges()
, я проверяю ChangeSet
для вставки/обновления/удаления и запускает статические события для каждого типа, который встает/обновляется/удаляется. Все это отлично работает, я просто ищу способ подключения обработчиков к событиям один раз, когда приложение запускается. Так что я играл с этим было:
static DataContext()
{
System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace == 'Data.Business')
.ToList()
.ForEach(t => {
// invoke the static TypeInitializer here,
// so that it can wire up it's event handlers.
});
}
Я мог бы использовать статический метод Initialize
, но так как они только должны всегда быть инициализированы один раз, я думал TypeInitializer
.
EDIT 2:
Я прочитал на MEF и это действительно дает возможность делать то, что я хотел сделать.
Вам когда-нибудь приходило в голову, что это просто плохой/неработоспособный дизайн? – x0n
Что плохой дизайн? Бизнес-уровень? Должен ли я помещать бизнес-правила в уровень представления? или вы имели в виду статическую природу? Я просто думал, что было бы более эффективно регистрировать один набор событий для всего слоя данных, чем новый набор событий для каждого контекста данных. –