相关疑难解决方法(0)

如何使用PostSharp实现延迟加载?

我想用PostSharp在属性上实现延迟加载.

简而言之,而不是写作

SomeType _field = null;
private SomeType Field
{
    get
    {
        if (_field == null)
        {
            _field = LongOperation();
        }
        return _field;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想写

[LazyLoadAspect]
private object Field
{
    get
    {
        return LongOperation();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我确定我需要在类中发出一些代码来生成支持字段,以及在getter方法中为了实现测试.

使用PostSharp,我正在考虑覆盖CompileTimeInitialize,但我错过了处理已编译代码的知识.

编辑: 问题可以扩展到任何无参数的方法,如:

SomeType _lazyLoadedField = null;
SomeType LazyLoadableMethod ()
{
    if(_lazyLoadedField ==null)
    {
        // Long operations code...
        _lazyLoadedField = someType;
    }
    return _lazyLoadedField ;
}
Run Code Online (Sandbox Code Playgroud)

会成为

[LazyLoad]
SomeType LazyLoadableMethod ()
{
     // Long operations code...
     return someType;
}
Run Code Online (Sandbox Code Playgroud)

c# aop lazy-loading postsharp

3
推荐指数
1
解决办法
851
查看次数

标签 统计

aop ×1

c# ×1

lazy-loading ×1

postsharp ×1