Спасибо за предложение.
Раньше я не использовал инъекцию зависимостей, но понял это.
Что я сделал, так это
Я создал интерфейс с задачами, необходимыми для моего класса DAL, например:
public interface IApplicationUserStore
{
Task<IdentityResult> Create(ApplicationUser user, string password);
Task<ApplicationUser> Get(string email);
}
затем мой класс DAL реализует такой интерфейс:
public class ApplicationUserStore : IApplicationUserStore
{
private ApplicationDbContext _context;
private readonly UserManager<ApplicationUser> _userManager;
public ApplicationUserStore(ApplicationDbContext ctx,
UserManager<ApplicationUser> userManager)
{
_context = ctx;
_userManager = userManager;
}
public async Task<ApplicationUser> Get(string email)
{
return await _context.Users.Where(u => u.Email ==
email).SingleOrDefaultAsync();
}
public async Task<IdentityResult> Create(ApplicationUser user,
string password)
{
return await _userManager.CreateAsync(user, password);
}
}
Я удалил поля applicationcontext и usermanager из моего контроллера и добавил IApplicationUserStore в мой контроллер следующим образом:
public class UserController : Controller
{
private IApplicationUserStore _userStore;
public UserController(IApplicationUserStore userStore)
{
_userStore = userStore;
}
[AllowAnonymous]
[HttpPost("create")]
public async Task<IActionResult> Create([FromBody] CreateApplicationUserViewModel model)
{
var user = new ApplicationUser()
{
Email = model.Email,
UserName = model.Email,
FirstName = model.FirstName,
LastName = model.LastName
};
var result = await _userStore.Create(user, model.Password);
if (result.Succeeded)
{
return Ok();
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("error", error.Description);
}
return BadRequest(result.Errors);
}
}
}
и наконец добавил applicationdbcontext и IApplicationUserStore в контейнер зависимостей, как это в моем классе запуска в BLL.
services.AddScoped<ApplicationDbContext, ApplicationDbContext>();
services.AddScoped<IApplicationUserStore, ApplicationUserStore>();
Таким образом, мой код свободно связан и прост в обслуживании.