在我的ASP.NET MVC应用程序中,我有一个包含所有业务逻辑/服务层的项目。该项目与位于单独项目中的我的数据库(实体框架)交互。应用程序服务层作为静态类
我希望能够轻松访问服务层,所以我在其中创建了静态类,以便可以轻松地引用它们。例如,如果我在我的控制,我需要创建一个新帐户:
ServiceLayer.Accounts.CreateAccount(userName, passWord) //etc..
服务层则没有所有必需的逻辑,然后创建通过在DatabaseLayer
库中的用户。
private static AllRepos _Repos;
private static AllRepos Repos {
get
{
if(_Repos == null)
_Repos = new AllRepos();
return _Repos
}
}
public static void CreateAccount(string username, password)
{
string salt = GenerateSalt();
Account newAccount = DatabaseLayer.Models.Account
{
Name = username,
Password = HashPassword(password, salt),
Salt = salt
};
Repos.AddAccount(newAccount);
}
因为我不想做到处都在我的服务层以下:
AccountRepository Accounts = new DatabaseLayer.AccountRepository();
我,而不是创建一个包装类为我的仓库,这样我只需要实例化一次使用所有其他仓库。
public class AllRepos
{
private AccountRepository _Accounts;
public AccountRepository Accounts
{
get
{
if (_Accounts== null)
_Accounts= new AccountRepository();
return _Accounts;
}
}
// the same is done for every other repository (currently have about 10+)
}
它被用在服务层的静态类中。
因为我所有的服务层类都是静态的,并且Repos
字段也是静态的,所以我一直遇到的明显问题是从多个数据上下文中检索同一对象,从而导致更新/删除的奇怪行为。
据我所知,如果我像使用静态成员/类一样使用静态成员/类是因为它们持续了应用程序的生命周期,但是有没有办法可以使用服务层而不必创建ServiceLayer.Accounts.Method()
一个非静态类,需要在使用它的任何地方实例化,并且由于多个datacontext实例而不会遇到CRUD问题?
“事实上,一些最好的帮手方法是静态的”你最好的概念是什么? – 2010-11-09 02:58:02