Construtor estático e classe Singleton
Eu tenho um cache de objetos que implementa o padrão de design do Singleton. Minha abordagem ao singleton sempre foi preguiçosa carregar a instância estática quando a propriedade é acessada pela primeira vez.
public static Widget
{
get
{
if(instance==null) instance = new Widget();
return instance;
}
}
No entanto, eu sei que esta abordagem não é thread-safe e a verificação por exemplo ser nula apresenta uma pequena ineficiência. Seria sensato implementar um construtor estático na classe que instancia a instância estática?
Pelo que entendi, o construtor estático seria chamado sempre que ocorre o primeiro acesso à propriedade estática. Isso é válido e fornecerá benefícios sobre a abordagem de carregamento lento atual ou seria melhor explorar uma implementação de proxy ou usar um bloqueio para forçá-lo a ser thread-safe?
public static Widget
{
get
{
if(instance==null)
{
lock(padlock)
{
if(instance==null) instance = new Widget();
}
}
return instance;
}
}
Não tenho muita experiência com construtores estáticos, portanto, não quero entrar nessa idéia se for uma implementação igual ou pior da propriedade de carregamento lento.
Felicidades, Gary