c#调用方法然后属性(设计类结构)

时间:2013-04-30 08:59:12

标签: asp.net-mvc linq design-patterns

public static class WebConfig
 {     
private static IList<SystemConfigs> sysconfkeys;
static WebConfig()
{         
    sysconfkeys = systemconfigrep.GetAllSystemConfig();
}

private static string _SMTPPort = "";
public static string SMTPPort
{
    get
    {
        return _SMTPPort = sysconfkeys.FirstOrDefault(e => e.metakey == "SMTPPort") != null ? sysconfkeys.FirstOrDefault(e => e.metakey == "SMTPPort").metavalue : "25";
    }
}

private static string _SMTPUsername = "";
public static string SMTPUsername
{
    get
    {
        return _SMTPUsername = sysconfkeys.FirstOrDefault(e => e.metakey == "SMTPUsername") != null ? sysconfkeys.FirstOrDefault(e => e.metakey == "SMTPUsername").metavalue : "";
    }
}

}

我在我的视图或控制器中使用上述方式的系统级变量。 我如何设计我的这个类,以便在调用方法执行查询后立即调用这样的属性。

用法:webconfig.getallsystemconfig()。LogicalPath;

webconfig.getallsystemconfig()SMTPPORT;

1 个答案:

答案 0 :(得分:1)

你可以使用扩展方法来完成这样的事情:

public static class WebConfig
{
    private static IList<SystemConfigs> sysconfkeys;

    public static IList<SystemConfigs> Configs()
    {                                   
        return sysconfkeys ?? (sysconfkeys = systemconfigrep.GetAllSystemConfig());
    }

    public static string SMTPPort(this IList<SystemConfigs> configs)
    {
         return sysconfkeys.Any(e => e.metakey == "SMTPPort") ? sysconfkeys.FirstOrDefault(e => e.metakey == "SMTPPort").metavalue : "25";
    }
}

你会像

一样使用它
WebConfig.Configs().SMTPPort();

如果没有像你的例子那样进行缓存,但无论如何它应该是一个可以忽略不计的损失