Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问非静态DAL方法_C#_Data Access Layer - Fatal编程技术网

C# 访问非静态DAL方法

C# 访问非静态DAL方法,c#,data-access-layer,C#,Data Access Layer,我对.net相当陌生,正在创建一个用于学习的web应用程序。我有一个包含非静态方法的DAL。我的问题是,我应该如何在业务层访问这些方法 我不确定这是一种好方法还是一种坏方法,但目前我使用此类来创建DAL方法的实例: public DataAccess { public static T GetInstance<T>(Type type) { return (T)Activator.CreateInstance(type); } } 公共数据访

我对.net相当陌生,正在创建一个用于学习的web应用程序。我有一个包含非静态方法的DAL。我的问题是,我应该如何在业务层访问这些方法

我不确定这是一种好方法还是一种坏方法,但目前我使用此类来创建DAL方法的实例:

public DataAccess
{
    public static T GetInstance<T>(Type type)
    {
        return (T)Activator.CreateInstance(type);
    }
}
公共数据访问
{
公共静态GetInstance(类型)
{
return(T)Activator.CreateInstance(类型);
}
}
我在DLL中使用如下实例:

public void Save(Article article)
{
    ArticleDAL art = DataAccess.GetInstance<ArticleDAL>(typeof(ArticleDAL));
    art.Save(article);
}
公共作废保存(文章)
{
ArticleDAL art=DataAccess.GetInstance(typeof(ArticleDAL));
第三条保存(物品);
}

是否有任何改进或建议?

是的,使用通用约束,因此根本不需要传入类型:

public DataAccess 
{ 
    public static T GetInstance<T>() where T : new()
    { 
        return new T()
    } 
}
公共数据访问
{ 
公共静态T GetInstance(),其中T:new()
{ 
返回新的T()
} 
}

真的没有理由不创建DAL的新安装,工厂在这里没有任何成就

public void Save(Article article)
{
    ArticleDAL art = new ArticleDAL();
    art.Save(article);
}

嗨,保罗,谢谢你的快速回复。上下文是我正在制作一个简单的CMS。从长远来看,在可维护性方面会更好吗?例如,如果我使用一个更通用的工厂,比如Mark建议的工厂,还是按照您的建议?当对象创建中涉及到一些逻辑时,工厂模式是很好的,但对于简单的实例化来说,它是毫无意义的。对于可维护性,我会将DAL传递到构造函数中,并使用依赖注入?