我创建了一个包含MVC项目和2个.net核心类库项目的解决方案。 1表示服务层,1表示存储库层。我已成功通过层连接接口。但是在程序类中尝试执行host.Run();
时出错。有了这个:
InvalidOperationException: Unable to resolve service for type 'VisualRepository.VisualJobsDbContext' while attempting to activate 'VisualRepository.RecruiterRepository'.
这是我的DBcontext类的开始:
public partial class VisualJobsDbContext : DbContext
{
private IConfigurationRoot _config;
public VisualJobsDbContext() { }
public VisualJobsDbContext(IConfigurationRoot config, DbContextOptions options) : base(options)
{
_config = config;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer(_config["ConnectionStrings:VisualJobsContextConnection"]);
}
这是我的Recruiter存储库的开始
public class RecruiterRepository : GenericRepository<VisualJobsDbContext,Agent>, IRecruiterRepository
{
private VisualJobsDbContext _context;
public RecruiterRepository(VisualJobsDbContext context) : base(context)
{
_context = context;
}
这两个都位于存储库层,我怀疑它失败了,因为我没有将其中任何一个设置为'New'。
在ConfigureServices方法的MVC项目的启动类中,我有:
services.AddSingleton(_configuration);
// Add framework services.
services.AddApplicationInsightsTelemetry(_configuration);
services.AddLogging();
services.RegisterServices();
services.AddMvc();
其中Services.RegisterServices是服务层中的一个方法,它将我的接口注册到di容器中,包括添加存储库容器。 我怀疑我需要以某种方式在mvc层中注册VisualJobsDBContext,但我希望我可以保留它在存储库层中注册一些,因为我不希望从MVC直接连接到该层。任何人都可以向我指出如何在存储库层中注册我的存储库的示例。
在我的Repository Layer中,当我注册我的接口时,我目前有以下代码:
public static class RepositoryCollectionExtensions
{
public static IServiceCollection RegisterRepositoryServices(this IServiceCollection services)
{
services.AddScoped<IRecruiterRepository, RecruiterRepository>();
return services;
}
}
所以我希望我能在这里做一些事情,例如services.AddDbContext(....但我似乎无法使签名正确。