我有一家"供应商工厂"它创建了具体提供者的实现。要创建正确的实现,除了其他参数之外,还需要 typeId 。 问题是,为了将正确的 typeId 传递给工厂,我需要验证并在必要时进行更改。 为了做到这一点,在其他参数中,我需要一个特定提供者的实例。问题出在哪里 - 提供者应该是单例(我真的不想让它成为具有大写S的Singleton),因为它查询数据库并将结果缓存在内部属性中。
所以我的问题是 - 是否有更合适的模式或其他方式来实现类似的东西?
public class provider
{
public int id { get; set; }
[Display(Name = "Username")]
[StringLength(
maximumLength: 100,
MinimumLength = 2,
ErrorMessageResourceType = typeof(Resources.Messages),
ErrorMessageResourceName = "StringLength")]
[Required(
AllowEmptyStrings = false,
ErrorMessageResourceType = typeof(Resources.Messages),
ErrorMessageResourceName = "Required")]
public string username { get; set; }
[Display(Name = "Password")]
[StringLength(
maximumLength: 100,
MinimumLength = 2,
ErrorMessageResourceType = typeof(Resources.Messages),
ErrorMessageResourceName = "StringLength")]
[Required(
AllowEmptyStrings = false,
ErrorMessageResourceType = typeof(Resources.Messages),
ErrorMessageResourceName = "Required")]
public string password { get; set; }
[Display(Name = "Email")]
[StringLength(
maximumLength: 100,
MinimumLength = 2,
ErrorMessageResourceType = typeof(Resources.Messages),
ErrorMessageResourceName = "StringLength")]
public string email { get; set; }
public virtual information information { get; set; }
}
答案 0 :(得分:1)
我建议您在ProviderFactory中实现ChainOfResponsibility模式,这样您每次添加新的Provider或更改逻辑时都不需要修改ProviderFactory。您只需要添加RegisterProvider(IProvider提供程序)方法来在链中添加提供程序,然后循环遍历这个提供程序链,调用每个IProvider的bool:DoesProviderSuit(int typeId,out IProvider)。
希望你能抓住一个主意,祝你好运!