Ich bin neu im ASP .net Core. Es gibt mir einen Abhängigkeitsinjektionsfehler als:
InvalidOperationException: Dienst für Typ 'Spinit.Data.Services.Repository.GameRepository' kann nicht aufgelöst werden, während versucht wird, 'SpinIt.Web.Controllers.CartController' zu aktivieren. Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService (IServiceProvider sp, Typ type, Type requiredBy, bool isDefaultParameterRequired)
StackTrace ist unten:
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)
lambda_method(Closure , IServiceProvider , object[] )
Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider+<>c__DisplayClass4_0.<CreateActivator>b__0(ControllerContext controllerContext)
Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider+<>c__DisplayClass5_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
CartController- Code
public class CartController:Controller
{
private readonly GameRepository _gameRepository;
private readonly Cart _cartRepository;
public CartController(GameRepository gameRepository, Cart cartRepository)
{
_gameRepository = gameRepository;
_cartRepository = cartRepository;
}
public ViewResult Index()
{
var items = _cartRepository.GetCartItems();
_cartRepository.CartItems = items;
var sCVM = new CartViewModel
{
Cart = _cartRepository,
CartTotal = _cartRepository.GetCartTotal()
};
return View(sCVM);
}
}
Ich habe auch Service zu Startup.cs hinzugefügt
services.AddScoped<IGame, GameRepository>();
services.AddScoped<ICartItem, CartItemRepository>();
Sie haben IGame
als IGame
und GameRepository
als Implementierungstyp mit dem .NET Core- GameRepository
in der Datei Startup.cs registriert. Anscheinend ist IGame
im Service-Container registriert und nur der IGame
Typ kann über DI injiziert werden. GameRepository
DI-System ist der Dienst mit dem Namen GameRepository
nicht bekannt, da er nicht im DI- GameRepository
registriert ist.
Bitte nehmen Sie folgende Änderungen am Controller-Konstruktor vor:
private readonly IGame _gameRepository;
private readonly ICartItem _cartRepository;
public CartController(IGame gameRepository, ICartItem cartRepository)
{
_gameRepository = gameRepository;
_cartRepository = cartRepository;
}