asp.net mvc4 EF5 Singleton?

本文关键字:Singleton EF5 mvc4 net asp | 更新日期: 2023-09-27 18:04:18

我有一个正在进行的项目,我想有一个唯一的类实例。

我有一个'JobOffer'类,它有一个'OfferStatus'类型的属性(它是抽象的,实现了一个状态模式)。我有"状态可用"answers"状态不可用"(或"打开"answers"关闭",如果你愿意)。'JobOffer'对象必须存储在数据库中。

我想只有一个'StateAvailable'和一个'StateUnavailable',所以当我创建一个新的JobOffer时,我引用'StateAvailable'或'StateUnavailable',然后我可以列出所有打开(可用)和所有关闭(不可用)的JobOffer。

我知道我可以通过在seed方法中添加db中的状态来做到这一点,并且永远不会实例化新状态。但我想知道是否有可能做一个单例或一些东西,以避免有人(我的意思是控制器,模型或任何东西)可以创建该类的新实例。

public class JobOffer {
public int JobOfferId {get;set;}
public OfferState State {get;set;
public virtual ICollection<Person> People {get;set;}
//And some methods here, which depends on the state
//ie, this.State.myMethod();

asp.net mvc4 EF5 Singleton?

我的第一个想法是使用布尔值。然后你说你必须能够扩展到有更多的状态,所以我想到了枚举。然后你说你有使用类的要求,所以…当我想要一个更聪明的enum时,我使用了一些东西。我想,你可以称之为一种"枚举类"。因此,您的OfferState类看起来像这样:

public sealed class OfferState
{
    public bool CanChangeState { get; set; }
    //whatever properties you need
    public static OfferState Available = new OfferState(true);
    public static OfferState Unavailable = new OfferState(true);
    public static OfferState Closed = new OfferState(false);
    //whatever states you need
    public OfferState(bool canChange)
    {
        CanChangeState = canChange;
    }
}

它的行为有点像enum,但它有类似类的属性。所以在你的逻辑中,你可以检查状态:

if (jobOffer.State == OfferState.Available)
{
    //stuff
}

你也可以从它获得属性,所以你可以使用它来获取关于状态的信息:

jobOffer.ExpiryDate = jobOffer.CreationDate.Add(OfferState.Available.MaxDuration);

当然,各种状态的static性质将确保每种状态只有一个实例