简体   繁体   中英

System.AggregateException: 'Some services are not able to be constructed' In my ASP.net core

I have a model:

public class Checkout
{
    public string CheckoutId { get; set; }

    public List<CheckoutItem> CheckoutItems { get; set; }

}

And I am trying to add methods to the Object while respecting POCOs. So I added A repository:

    public class CheckoutRepository : ICheckoutRepository
    {
        private readonly AppDbContext _appDbContext;
        private readonly Checkout _checkout;

        public CheckoutRepository(AppDbContext appDbContext, Checkout checkout)
        {
            _appDbContext = appDbContext;
            _checkout = checkout;

        }

        public void AddItem(unitItem item, int amount)
        {
              //Removed for brevity 
        }

        public void ClearCheckout()
        {
           //Details removed for brevity
        }

        public Checkout GetCart(IServiceProvider serviceProvider)
        {   
          //Details removed for brevity
        }

        public List<CheckoutItem> GetCheckoutItems()
        {
            //Details removed for brevity
        }

        public decimal GetCheckoutTotal()
        {
           //Details removed for brevity
        }

        public decimal RemoveItem(unitItem item)
        {
           //Details removed for brevity
        }

And an interface to the Repository

public interface ICheckoutRepository
    {
         Checkout GetCart(IServiceProvider serviceProvider);

        void AddItem(unitItem item, int amount);

        decimal RemoveItem(unitItem item);

        List<CheckoutItem> GetCheckoutItems();

        void ClearCheckout();

        decimal GetCheckoutTotal();
    }

I, of course, add this to the startup file.

services.AddTransient<ICheckoutRepository, CheckoutRepository>();

But when I run the application I get the error

System.AggregateException: 'Some services are not able to be constructed'

And 2 inner exceptions

1:

InvalidOperationException: Error while validating the service descriptor 'ServiceType: BataCMS.Data.Interfaces.ICheckoutRepository Lifetime: Transient ImplementationType: BataCMS.Data.Repositories.CheckoutRepository': Unable to resolve service for type 'BataCMS.Data.Models.Checkout' while attempting to activate 'BataCMS.Data.Repositories.CheckoutRepository'.

And 2:

InvalidOperationException: Unable to resolve service for type 'BataCMS.Data.Models.Checkout' while attempting to activate 'BataCMS.Data.Repositories.CheckoutRepository'

Could really use some insight into this problem.

When you look at your CheckoutRepository constructor, you'll see that you're injecting an instance of a Checkout class. ASP.NET doesn't know where to search for an instance of that class to inject, so you have to register it in your DI container.

Add this to your Startup file:

services.AddTransient<Checkout>(new Checkout());

This is a little bit different type of registering. Instead of depending on abstraction, you're depending on a concrete implementation of Checkout class. I've passed a default, parameterless constructor to the above example, but you can pass any other constructor to it, or (to depend on an abstraction) just create the ICheckout interface and register just like you registered the ICheckoutRepository :

services.AddTransient<ICheckout, Checkout>();

More on DI can be found here

Maybe you missing?

services.AddTransient<ICheckout, Checkout>();

Hope I helped.

This was beacuse I declared in Irepo as IEnumberable and passed a List from Repo. Fixing this has fixed my issues

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM