2013-04-22 2 views
0

Мне жаль, что у меня нет синглетного шаблона PostSharp?PostSharp singleton

Возможно ли для PostSharp?

Есть ли существующий пример или проект?

Хотите так что-то вроде:

interface ISingleton 
{ 
    void Refresh(); 
    object Instance{get;set;} 
} 

[Singleton(AutoRefresh=true, AutoRefreshInterval=20)] 
public class Repository 
{ 
    private Repository() 
    { 
     //Code to load data... 
    } 
    public DoSomething() 
    { 
     //Do something at instance level; 
    } 
    public void Refresh() 
    { 
     //Refresh data 
    } 
} 

SingletonAttribute должен сделать класс для реализации ISingleton и вставить код для Instance собственности и Refresh() метод тела

При использовании класса:

((Repository as ISingleton).Instance as Repository).DoSomething(); 
+1

Это не те аспекты, которые предназначены для пользователя. Что не так с дженериками? –

ответ

4

Насколько я понимаю, вы хотите контролировать время жизни объекта. Это не то, что вы можете сделать с АОП. Такие вещи обычно управляются с помощью IoC container (Unity, Windsor, Ninject) и настройки времени жизни объекта (такие параметры, как singleletone, один экземпляр на поток, один экземпляр на запрос доступны). Если вы используете контейнер IoC, вы можете написать свой собственный атрибут, чтобы вы могли take all classes with, for example, [Singletone] attribute и зарегистрировать их с единым временем жизни в контейнере. Затем, когда потребители вашего класса разрешают экземпляр из контейнера, они всегда будут иметь один и тот же экземпляр.

+0

Хорошо, я сделаю больше исследований по IoC. Спасибо. – orange