2013-08-12 5 views
1

Я использую ASP.NET 3.5 с C# 2008.Singleton класс для многомерных данных

У меня есть таблица с данными, как показано ниже:

Id Code Message Details 
-- ---- ------ ------------ 
1 111 xxxxx xxxxxxxxxxx 
2 222 yyyyy yyyyyyyyyyy 
3 333 zzzzz zzzzzzzz 

и так далее ..

Это статические данные, и я хочу использовать его через приложение.

Я создал класс со свойствами, как показано ниже:

public class CodeDetails 
{ 
    public int Id { get; set; } 
    public int Code { get; set; } 
    public string message { get; set; } 
    public string details { get; set; } 
} 

И создал еще один класс codeDetailsList, которому я хочу сделать так singletone, как показано ниже:

public class codeDetailsList 
{ 
    private List<CodeDetailst> lstCodeDetailst; 

    private CodeDetailst() 
    { 
     lstCodeDetails = new List<CodeDetails>(); 
    } 
} 

Теперь, что я хочу do, я хочу добавить элементы приведенных выше табличных данных в этот список класса singleton и получить к нему доступ по всему приложению.

Вопрос: как добавить элементы и получить к ним доступ?

+0

Возможно, вы можете поместить эти данные в объект сеанса и использовать его в течение –

+0

Он не может у вас se, поскольку данные являются общими для приложения, а не для конкретного пользователя. –

ответ

3

Как и в ответе Варуна, я просто хотел выполнить полную реализацию.

public class CodeDetailsList 
{ 
    private static readonly CodeDetailsList _instance = new CodeDetailsList(); 
    public static CodeDetailsList Instance 
    { 
     get { return _instance; } 
    } 

    public ReadOnlyCollection<CodeDetails> lstCodeDetailst { get; private set; } 

    private codeDetailsList() 
    { 
     var masterList = new List<CodeDetails>(); 

     masterList.Add(new CodeDetails(1, 111, "xxxxx", "xxxxxxxxxxx")); 
     masterList.Add(new CodeDetails(2, 222, "yyyyy", "yyyyyyyyyyy")); 
     //... And so on ... 

     //mark the list as read only so no one can add/remove/replace items in the list 
     lstCodeDetailst= masterList.AsReadOnly(); 
    } 
} 

public class CodeDetails 
{ 
    public CodeDetails(id, code, message, details) 
    { 
     Id = id; 
     Code = code; 
     Message = message; 
     Details = details; 
    } 

    //Mark the setters private so no one can change the values once set. 
    public int Id { get; private set; } 
    public int Code { get; private set; } 
    public string Message { get; private set; } 
    public string Details { get; private set; } 
} 

Конструктор CodeDetailsList будет вызываться один раз при первой попытке доступа Instance (Если вы имели другие статические член в классе конструктор будет работать на первый раз любой статический член был вызван).

Поскольку lstCodeDetaillst является ReadOnlyCollection, абоненты не могут добавлять, удалять или заменять объекты в списке. Кроме того, поскольку сейчас CodeDetails имеет частные сеттеры, все элементы в нем эффективно «читаются только».

+0

В другом классе я использую CodeDetailsList c = CodeDetailsList.Instance; и он дает мне нулевой экземпляр. Как его инициализировать? – Dev

+0

Спасибо. Вместо использования свойства get {return _instance; }, Я создал открытый метод getInstance(), который возвращает _Instance. Работает нормально. Еще раз спасибо.. :) – Dev

1
public class CodeDetailsList 
{ 
    public static readonly CodeDetailsList Instance = new CodeDetailsList(); 

    public List<CodeDetails> ListCodeDetails { get; private set; } 

    private CodeDetailsList() 
    { 
     ListCodeDetails = new List<CodeDetails> 
     { 
      new CodeDetails { Id = 1, Code = 1, Details = "xxxxx", Message = "xxxxx"}, 
      new CodeDetails { Id = 2, Code = 2, Details = "yyyyy", Message = "yyyy"} // ... 
     }; 
    } 
} 

Вы должны инициализировать данные в конструкторе codeDetailsList. Конструктор должен оставаться закрытым, чтобы гарантировать, что вы не создадите новый экземпляр. Получите доступ к данным с помощью поля Instance на CodeDetailsList.

+0

OK Спасибо Varun, но еще один вопрос: как добавить элементы в список в частный конструктор? – Dev

+0

Это сделает новый экземпляр списка каждый раз, когда вы его вызываете. – msarchet

+0

@msarchet ok .. У вас есть другое решение? – Dev

0

Вы умышленно опустили метод getInstance() из своего класса Singleton? в любом случае ...

Надстройка может выглядеть примерно так:

CodeDetails codeDetails = new CodeDetails(); 
codeDetails.setId("id1"); 
codeDetails.setCode("code1"); 
codeDetails.setMessage("message1"); 
codeDetails.setDetails("details1"); 

(CodeDetailsList.getInstanceMethod()).add(codeDetails); 

Для доступа:

CodeDetails codeDetails = (CodeDetails)(CodeDetailsList.getInstaceMethod()).get(0); 

Вы можете поместить его в петлю, если у вас есть количество записей

Надежда это помогает

Смежные вопросы