一种调用方法的方法

时间:2012-01-16 14:19:44

标签: c# asp.net .net

我有以下内容,我想将webDB和项目的设置移到以下public string method之外,这是一个例子,我将如何进行此操作。

public string Width
{
    get
    {
        if (webDB != null)
        {
            webDB = Sitecore.Configuration.Factory.GetDatabase("web");
            Sitecore.Data.Items.Item item = webDB.Items[StartItem];

            if (item != null)
            {
                Sitecore.Data.Fields.Field field = item.Parent.Fields["Identity_Page_Width"];

                if (!String.IsNullOrEmpty(field.Value))
                {
                    return field.Value;
                }
                else
                {
                    return "964"; // returns default pixel width if Identity_Page_Width is not defined, or is null
                }
            }
            else
            {
                return "964"; // If item is not found return default width.
            }
        }
        else
        {
            return "964";
        }
    }
}    

这就是我尝试将其分开的方式:

public void GetConfiguration()
{
    if (webDB != null)
    {
        webDB = Sitecore.Configuration.Factory.GetDatabase("web");

        if (item != null)
        {
            item = webDB.Items[StartItem];
        }
    }
}

但是我试图在我得到的method must have a return type代码中运行该方法。

然后我想在某个类的某个地方运行这个GetConfiguration只有ONCE所以所有方法都不需要更多地联系数据库和项目数据。

我可以做MyClass class = New MyClass; Class.GetConfiguration();但我不希望未来的编码员必须知道这种需要每次都要实例化以继续。我宁愿删除那种依赖。

3 个答案:

答案 0 :(得分:1)

您的代码可以通过几种方式得到改进。但要回答你的问题 - 为什么不使用静态c'tor?这样你就可以确保它只运行一次

public class SomeClass
{
    static SomeClass()
    {
        if (webDB != null)
        // etc. etc.
    }
    ... // other code
}

答案 1 :(得分:1)

webDB变量设为静态将强制它在您的第一个Property调用中仅为null。

private static <whatevertype> webDB;
private static <whatevertype> item;

public void GetConfiguration()
{
    if (webDB == null)
    {
        webDB = Sitecore.Configuration.Factory.GetDatabase("web");

        if (item != null)
            item = webDB.Items[StartItem];
    }
}

答案 2 :(得分:1)

如果实例化webDB对于类的大部分/全部功能至关重要,请考虑在实例构造函数(如果是非静态)或静态构造函数(如果是静态的)中初始化它

否则,我会创建一个

private InitializeWebDB(){if(webDB == null){...}}

您可以在需要时在班级内打电话。 此外,在需要访问它的属性上,我会使用方法,例如:

public String GetWidth(){InitializeDB(); ...}

这意味着比简单的属性字段返回更多的逻辑/开销。