2016-10-18 2 views
1

Wenn ich im Konstruktor dieses Controllers einen Haltepunkt festlege, sehe ich eine system.ObjectDisposedException von userManager.Users. Warum kann .NET mir einen entsorgten UserManager geben? Ich habe andere Steuerungen, die die gleiche Art und Weise und ihre UserManagers funktionieren (dieses stirbt, wenn es nennt GetUserAsync)Warum wird meinem Controller ein UserManager übergeben?

[RequireHttps] 
public class HomeController : Controller 
{ 
    private readonly UserManager<ApplicationUser> _userManager; 
    private readonly RegionService _regionService; 
    private readonly ILogger _logger; 

    public HomeController(UserManager<ApplicationUser> userManager, RegionService regionService, ILoggerFactory loggerFactory) 
    { 
     _userManager = userManager; 
     _regionService = regionService; 
     _logger = loggerFactory.CreateLogger<HomeController>(); 
    } 

    [HttpGet] 
    public async Task<IActionResult> Index() 
    { 
     var user = await _userManager.GetUserAsync(HttpContext.User); 

     ... 
    } 

... aufgebaut zu sein scheinen, und ich sollte keine Datenbank in Home/Index zugreifen ; Ich werde das später ändern

Edit: Dies ist, wie Dienste konfiguriert werden:

public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddApplicationInsightsTelemetry(Configuration); 

     services.AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 

     services.AddIdentity<ApplicationUser, IdentityRole>(options => 
     { 
      options.Password.RequireDigit = true; 
      options.Password.RequireLowercase = false; 
      options.Password.RequireNonAlphanumeric = false; 
      options.Password.RequireUppercase = false; 
      options.Password.RequiredLength = 6; 
     }) 
      .AddEntityFrameworkStores<ApplicationDbContext>() 
      .AddDefaultTokenProviders(); 

     services.AddMvc(); 

     // Add application services. 
     services.AddTransient<IEmailSender, AuthMessageSender>(); 
     services.AddTransient<ISmsSender, AuthMessageSender>(); 
     services.Configure<AuthMessageSenderOptions>(Configuration); 
     services.AddTransient<RegionService>(); 

     // require SSL 
     services.Configure<MvcOptions>(options => 
     { 
      options.Filters.Add(new RequireHttpsAttribute()); 
     }); 
    } 
+0

Wie sind Ihre Dienste eingerichtet? –

+0

@NateBarbettini in der ConfigureServices-Methode Startup.cs? –

+0

@NateBarbettini Es gibt nichts, das speziell einen UserManager von dem, was ich sehen kann, eingerichtet hat (ich bin neu bei ASP.NET) –

Antwort

0

Das Problem im Konstruktor einer Klasse war ich RegionService genannt erstellt

public RegionService(IServiceProvider serviceProvider) 
    { 
     using (var context = serviceProvider.GetService<ApplicationDbContext>()) 
     { 
      ... 
     } 
    } 

Die 'using'-Anweisung bewirkt, dass' context 'entfernt wird, nachdem es mit diesem Codeblock fertig ist. Ich hätte gerade eine neue Instanz des DbContext erstellen können, die entsorgt werden kann:

Verwandte Themen