2010-08-08 2 views
8

У меня есть много точек входа в моей сборке, и я хочу, чтобы какой-то код инициализации выполнялся один раз на AppDomain до запуска любого другого кода из этой сборки. Какой был бы лучший способ сделать это?Статический конструктор для всей сборки

Одно из решений, которое я вижу, это иметь класс со статическим конструктором и наследовать каждую точку входа, которую я имею от него. Что-то вроде этого:

public class Initializer 
{ 
    static Initializer() 
    { 
     EnsureInitialized(); // Calls initialization code once and only once 
    } 
} 

public class EntryPointOne : Initializer, IEntryPoint 
{ 
    // Some code here 
} 

public class EntryPointTwo : Initializer, IEntryPoint 
{ 
    // Some code here 
} 

// etc. 

Это позволяет мне избежать написания котла пластины статических конструкторов в каждой точке входа, но без несколько наследования это не всегда возможно. Можете ли вы подумать о других лучших вариантах?

+0

http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload.aspx –

+0

Просьба уточнить, хотите ли вы выполнить код «один раз на сборку» или «один раз на AppDomain». Помните, что в AppDomain может быть много сборок, и в зависимости от сборки он может быть разделен между сборками (только один раз загружается). – Manfred

ответ

Смежные вопросы