我有以下内容,我想将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();
但我不希望未来的编码员必须知道这种需要每次都要实例化以继续。我宁愿删除那种依赖。
答案 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(); ...}
这意味着比简单的属性字段返回更多的逻辑/开销。