依赖注入 - 静态方法

时间:2016-07-18 14:11:57

标签: c# design-patterns dependency-injection static-methods

我正在尝试为下面的场景找到合适的设计模式。

我有一个可以访问不同数据源的dataaccess类。所以我设计了每个数据源的实现类(DataAccessMongo,DataAccesssql)。

根据配置更改,必须切换数据源。我认为正确的方法是使用依赖注入和必须接受接口作为依赖关系的数据访问类。在下面的场景中,所有方法都是静态的,我无法在接口中使用静态方法。所以现在我使用枚举来检查什么是数据访问类型并调用相应的方法。如果有更多数据源,那么我肯定应该为每个数据源添加更多条件。我想要一个更好的设计模式。请建议这个场景最好的模式。感谢。

//Implementation class for Mongo
Public Class DataAccessMongo 
{
    public static string FindById(string itemId)
    {
    ...
    }
    public static string FindByName(string itemId)
    {
    ...
    }
    public static string FindByLastName(string itemId)
    {
    ...
    }
}

//Implementation class for Sql
Public Class DataAccessSql
{
    public static string FindById(string itemId)
    {
    ...
    }
    public static string FindByName(string itemId)
    {
    ...
    }
    public static string FindByLastName(string itemId)
    {
    ...
    }
}


Public Class DataAccess
{
    public static string FindById(string id)
    {
            string result = string.Empty;

            if (databaseType == EnumDb.Mongo)
            {
                result = DataAccessMongo.FindById(id);
            }
            else if (databaseType == EnumDb.Sql){
                result = DataAccessSql.FindById(id);
            }

            return result;
    }
    public static string FindByName(string itemId)
    {
            string result = string.Empty;

            if (databaseType == EnumDb.Mongo)
            {
                result = DataAccessMongo.FindByName(id);
            }
            else if (databaseType == EnumDb.Sql){
                result = DataAccessSql.FindByName(id);
            }

            return result;
    }
    public static string FindByLastName(string itemId)
    {
            string result = string.Empty;

            if (databaseType == EnumDb.Mongo)
            {
                result = DataAccessMongo.FindByLastName(id);
            }
            else if (databaseType == EnumDb.Sql){
                result = DataAccessSql.FindByLastName(id);
            }

            return result;
    }

}

注意:这些方法用于Web API方法。

0 个答案:

没有答案