Unable to resolve service for type while attempting to activate

后端 未结 7 934
春和景丽
春和景丽 2020-12-09 02:22

I have one file Repository.cs that contains an interface and its implementation like so:

public interface IRepository

{
    IEnumerable

        
相关标签:
7条回答
  • 2020-12-09 02:43

    A method like this needs to be added to your Startup:

        // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        //...
    
        // Add application services.
        services.AddTransient<IRepository, MemoryRepository>();
    
        //..
    }
    

    Services should be registered before used.

    UPDATE: If you do not want to use DI on your application, just create and instance of MemoryRepository on the constructor of HomeController, like this:

    public class HomeController : Controller
        {
            private IRepository repository;
    
            public HomeController()
            {
                repository = new MemoryRepository();
            }
    
            public IActionResult Index()
            {
                return View(repository.Cities);
            }
    
        }
    
    0 讨论(0)
  • 2020-12-09 02:47

    Other answers are CORRECT, however I was spinning up a new asp.net core 2.1.x project and got this error.

    Ended up being a typo by ME.

    So in my Controller instead of Correctly using the Interface like this

    public HomeController(IApplicationRepository applicationRepository)
    {
        _applicationRepository = applicationRepository;
    }
    

    My typo had me using ApplicationRepository instead of ApplicationRepository Notice below, and so with NO ERRORS spotting the missing "I" was fun :/

    public HomeController(ApplicationRepository applicationRepository)
    {
        _applicationRepository = applicationRepository;
    }
    

    Thus the controller was not resolving the DI...

    0 讨论(0)
  • 2020-12-09 02:53

    This may not be helpful for your code sample but in my case the same error was a result of a circular dependency.

    0 讨论(0)
  • 2020-12-09 02:54

    You have to add your implementation to DI (Dependeny Injection) section. For .Net Core Mvc, it would be like this:

     public void ConfigureServices(IServiceCollection services)
     {
       services.AddDbContext<ApplicationDbContext>(options =>
        options.UseInMemoryDatabase()
       );
       services.AddScoped<IRepository, MemoRepostory>();
    
     }
    
    0 讨论(0)
  • 2020-12-09 02:59

    We are getting this error in Entity frame work core database first approach. I followed below steps and error got resolvedenter code here

    Step 1: Check Your context class constructor should be like this

    public partial class ZPHSContext : DbContext
    {
        public ZPHSContext(DbContextOptions<ZPHSContext> dbContextOptions):base(dbContextOptions)
        {
        }
    }
    

    Step 2: In Startup file

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddDbContext<ZPHSContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
    }
    

    Step 3: Connection string in appsettings

    "ConnectionStrings": {
        "BloggingDatabase": "Server=Server=****;Database=ZPHSS;Trusted_Connection=True;"
    }
    

    Step 4: Remove default code in OnConfiguring method in context class

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
    }
    
    0 讨论(0)
  • 2020-12-09 03:01

    you have to register your repository like this

    services.AddSingleton<IRepository, MemoryRepository>();

    0 讨论(0)
提交回复
热议问题