0

我希望我有一个 PostSharp 驱动的单例模式?

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 Property 和 Refresh() 方法主体插入代码

使用类时:

((Repository as ISingleton).Instance as Repository).DoSomething();
4

1 回答 1

4

据我了解,你想控制一个对象的生命周期。这不是您单独使用 AOP 可以做到的。此类事情通常通过使用IoC 容器UnityWindsorNinject)和设置对象的生命周期(例如单调、每个线程一个实例、每个请求一个实例等选项可用)来管理。如果您使用 IoC 容器,您可以编写自己的属性,因此您可以获取所有具有例如 [Singletone] 属性的类,并将它们注册到容器中的单例生存期。然后,当您的类的消费者从容器中解析实例时,他们将始终获得相同的实例。

于 2013-04-23T08:01:51.497 回答