我想知道将UserManager添加到我的工作单元的最佳方法是什么。我应该使用IUstrore接口并在我的控制器中添加新的UserManager吗?我应该在UnitOfWork中使用UserManager还是应该做些不同的事情?
这是我的工作单元和控制器实现的两个想法。
public class UnitOfWorkPds : IUnitOfWorkPds, IDisposable
{
private ApplicationDbContext context = new ApplicationDbContext();
private IUserStore<ApplicationUser> userStore;
public IUserStore<ApplicationUser> UserStore
{
get
{
if (this.userStore == null)
{
this.userStore = new UserStore<ApplicationUser>(context);
}
return userStore;
}
}
}
//interface
public interface IUnitOfWorkPds
{
void Save();
void Dispose();
IUserStore<ApplicationUser> UserStore { get; }
}
控制器:
var Umanager = new UserManager<ApplicationUser>(unitOfWorkPds.UserStore);
Umanager.Dispose();
选项2在工作单元中创建用户管理器。
public class UnitOfWorkPds : IUnitOfWorkPds, IDisposable
{
private ApplicationDbContext context = new ApplicationDbContext();
private UserManager<ApplicationUser> userManager;
public UserManager<ApplicationUser> UserManager
{
get
{
if (this.userManager == null)
{
this.userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
}
return userManager;
}
}
}
public interface IUnitOfWorkPds
{
void Save();
void Dispose();
UserManager<ApplicationUser> UserManager { get; }
}
控制器:
var UManager = unitOfWorkPds.UserManager
Umanager.Dispose();
注意:我使用的是Asp.net MVC5,c#,Entity Framework 6.此外,我的工作单元中还有其他存储库,但我将它们留给了用户实现。
无论哪种方式起作用,我都会收到此警告,但要摆脱错误,我调用了this.userStore.Dispose();错误下面是我对Dispose的实现。目前我正在我的工作单元中调用userStore上的dispose。我还在我的控制器中为这个userStore创建了一个用户管理器,我也在我的控制器内的userManager上调用dispose。
CA2213一次性字段应该包含“UnitOfWorkPds” 字段'UnitOfWorkPds.userManager'是IDisposable类型: '的UserManager'。更改Dispose方法 'UnitOfWorkPds'在此调用Dispose或Close 领域。 UnitOfWorkPds.cs 96
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
if(this.userStore != null)
{ this.userStore.Dispose(); }
context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
答案 0 :(得分:0)
您需要查看UnitOfWork模式。 The Unit Of Work Pattern And Persistence Ignorance
对于错误问题,请确保您有以下代码段。
public class UnitOfWorkPds : IUnitOfWorkPds, IDisposable
{
private ApplicationDbContext context = new ApplicationDbContext();
private UserManager<ApplicationUser> userManager;
public UserManager<ApplicationUser> UserManager
{
get
{
if (this.userManager == null)
{
this.userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
}
return userManager;
}
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if(this.userManager != null)
{ this.userManager.Dispose(); }
context.Dispose();
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Disposable types implement a finalizer.
~UnitOfWorkPds()
{
Dispose(false);
}
}