在调用基本构造函数和辅助方法时使用 class 属性
Using a class property while calling the base constructor and in helper methods
我有这段代码 --
public class UserManager : UserManager<ApplicationUser>
{
private ApplicationDbContext _dbAccess;
public UserManager() :
base(new UserStore<ApplicationUser>(new ApplicationDbContext()))
{
this.UserValidator = new CustomUserValidator<ApplicationUser>(this);
var provider = new MachineKeyProtectionProvider();
this.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>(
provider.Create("SomeCoolAuthentication"));
//DO I REALLY NEED TO DO THIS AGAIN?
this._dbAccess = new ApplicationDBContext();
}
public bool myOwnHelperMethod(){
//is there a way to use the ApplicationDbContext instance that
//was initialized in the base constructor here?
//Or do i have to create a new instance?
}
}
有没有更好的方法来编写此代码,以便我可以实例化 ApplicationDBContext,使用它来调用基本构造函数,然后稍后在某些辅助方法中使用相同的实例?或者我是否必须在构造函数中创建另一个实例以用于辅助方法。
将此 属性 添加到您的 UserManager
class:
private ApplicationDbContext Context
{
get { return ((UserStore<ApplicationUser>)this.Store).Context as ApplicationDbContext; }
}
UserManager
class 暴露了 Store
属性。由于您知道内部使用的对象类型,因此您可以转换它们并在代码中使用 Context
属性。
你有几个选择。
第一个是使用依赖注入。使用这种方法,您可以将 ApplicationDbContext
的创建移除到 UserManager
之外,并通过构造函数将其传入。例如:
public class UserManager : UserManager<ApplicationUser>
{
private ApplicationDbContext _dbAccess;
public UserManager(ApplicationDbContext dbAccess) :
base(new UserStore<ApplicationUser>(dbAccess))
{
...
this._dbAccess = dbAccess;
}
...
}
我刚才建议的第二个选项已经由@Juan在他的回答中提供,所以我不再重复。
我有这段代码 --
public class UserManager : UserManager<ApplicationUser>
{
private ApplicationDbContext _dbAccess;
public UserManager() :
base(new UserStore<ApplicationUser>(new ApplicationDbContext()))
{
this.UserValidator = new CustomUserValidator<ApplicationUser>(this);
var provider = new MachineKeyProtectionProvider();
this.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>(
provider.Create("SomeCoolAuthentication"));
//DO I REALLY NEED TO DO THIS AGAIN?
this._dbAccess = new ApplicationDBContext();
}
public bool myOwnHelperMethod(){
//is there a way to use the ApplicationDbContext instance that
//was initialized in the base constructor here?
//Or do i have to create a new instance?
}
}
有没有更好的方法来编写此代码,以便我可以实例化 ApplicationDBContext,使用它来调用基本构造函数,然后稍后在某些辅助方法中使用相同的实例?或者我是否必须在构造函数中创建另一个实例以用于辅助方法。
将此 属性 添加到您的 UserManager
class:
private ApplicationDbContext Context
{
get { return ((UserStore<ApplicationUser>)this.Store).Context as ApplicationDbContext; }
}
UserManager
class 暴露了 Store
属性。由于您知道内部使用的对象类型,因此您可以转换它们并在代码中使用 Context
属性。
你有几个选择。
第一个是使用依赖注入。使用这种方法,您可以将 ApplicationDbContext
的创建移除到 UserManager
之外,并通过构造函数将其传入。例如:
public class UserManager : UserManager<ApplicationUser>
{
private ApplicationDbContext _dbAccess;
public UserManager(ApplicationDbContext dbAccess) :
base(new UserStore<ApplicationUser>(dbAccess))
{
...
this._dbAccess = dbAccess;
}
...
}
我刚才建议的第二个选项已经由@Juan在他的回答中提供,所以我不再重复。