ASP.NET Core 2 parvenez pas à résoudre un service de type Microsoft EntityFrameworkCore DbContext
Quand je lance mon asp.net core 2 projets que je reçois le message d'erreur suivant:
InvalidOperationException: Impossible de résoudre un service de type " Microsoft.EntityFrameworkCore.DbContext' tout en tentant d'activer " ContosoUniversity.Service.Classe.StudentService'.
Voici mon projet structure:
-- solution 'ContosoUniversity'
----- ContosoUniversity
----- ContosoUniversity.Model
----- ContosoUniversity.Service
IEntityService (code relatives à l') :
public interface IEntityService<T> : IService
where T : BaseEntity
{
Task<List<T>> GetAllAsync();
}
IEntityService (code relatives à l') :
public abstract class EntityService<T> : IEntityService<T> where T : BaseEntity
{
protected DbContext _context;
protected DbSet<T> _dbset;
public EntityService(DbContext context)
{
_context = context;
_dbset = _context.Set<T>();
}
public async virtual Task<List<T>> GetAllAsync()
{
return await _dbset.ToListAsync<T>();
}
}
Entité :
public abstract class BaseEntity {
}
public abstract class Entity<T> : BaseEntity, IEntity<T>
{
public virtual T Id { get; set; }
}
IStudentService :
public interface IStudentService : IEntityService<Student>
{
Task<Student> GetById(int Id);
}
StudentService :
public class StudentService : EntityService<Student>, IStudentService
{
DbContext _context;
public StudentService(DbContext context)
: base(context)
{
_context = context;
_dbset = _context.Set<Student>();
}
public async Task<Student> GetById(int Id)
{
return await _dbset.FirstOrDefaultAsync(x => x.Id == Id);
}
}
SchoolContext :
public class SchoolContext : DbContext
{
public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
{
}
public DbSet<Course> Courses { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Student> Students { get; set; }
}
Et enfin, voici mon de Démarrage.cs classe :
public class Startup
{
public Startup(IConfiguration configuration, IHostingEnvironment env, IServiceProvider serviceProvider)
{
Configuration = configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }
//This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<SchoolContext>(option =>
option.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddScoped<IStudentService, StudentService>();
services.AddMvc();
}
//This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Que dois-je faire pour résoudre ce problème?
AddDbContext<SchoolContext>
uniquement des registres précis de votre DbContext, SchoolContext
, pas de ses classes de base. Essayez de faire une recherche.
OriginalL'auteur mohammad | 2017-09-20
Vous devez vous connecter pour publier un commentaire.
StudentService
attendDbContext
mais le conteneur ne sais pas comment le résoudre en fonction de votre démarrage.Vous devez soit ajouter explicitement le contexte pour le service de collecte
De démarrage
Ou mise à jour de la
StudentService
constructeur explicitement s'attendre à un type du conteneur sait comment le résoudre.StudentService
OriginalL'auteur Nkosi
si dbcontext hérité de système.les données.de l'entité.DbContext puis il woud être ajouté comme ça
OriginalL'auteur dewelloper