Nicht konsumieren können, scoped service IMongoDbContext von singleton IActiveUsersService nach upgrade auf ASP.NET Core 2.0

Ich aktualisiert, ein Projekt zu ASP.NET Core 2 heute und ich bekomme die folgende Fehlermeldung:

Nicht verbrauchen kann, scoped service IMongoDbContext von singleton IActiveUsersService

Habe ich folgende Eintragung:

services.AddSingleton<IActiveUsersService, ActiveUsersService>();
services.AddScoped<IMongoDbContext, MongoDbContext>();
services.AddSingleton(option =>
{
   var client = new MongoClient(MongoConnectionString.Settings);
   return client.GetDatabase(MongoConnectionString.Database);
})



public class MongoDbContext : IMongoDbContext
{
   private readonly IMongoDatabase _database;

   public MongoDbContext(IMongoDatabase database)
   {
      _database = database;
   }

   public IMongoCollection<T> GetCollection<T>() where T : Entity, new()
   {
      return _database.GetCollection<T>(new T().CollectionName);
   }
}

public class IActiveUsersService: ActiveUsersService
{

   public IActiveUsersService(IMongoDbContext mongoDbContext)
   {
      ...
   }
}

Warum DI nicht zu verbrauchen, das service? Alle funktioniert gut für ASP.NET Core 1.1.

Warum willst du das überhaupt haben die Mongo Kontext beschränkt werden, in Erster Linie? Haben Sie irgendeine Art von Mieter-Funktionalität, wo man weiß, die Mandanten-id erst zur Laufzeit? MongoDatabase ist thread-sicher, so können Sie auch halten Sie es als singleton (vorausgesetzt, Sie laufen nicht 100te davon halten, zu viele verbindungen öffnen). EF-Core auf der anderen Seite ist nicht thread-safe und hat einen caching-Mechanismus standardmäßig aktiviert (EF-Core-tracking fungiert auch als caching), so ist es natürlich, es zu haben scoped)
Möglich, Duplikat der Verwenden DbContext in ASP .Net Singleton Injiziert Klasse

InformationsquelleAutor user348173 | 2017-08-22

Schreibe einen Kommentar