NET CORE 3中DI的问题注册服务

问题描述 投票:0回答:1

我正在将依赖项注入应用于我的dotnet 3.1项目。我在应用程序层中创建了一个ServiceRegister类:

namespace Microsoft.Extensions.DependencyInjection
{
    public static class ServiceRegister
    {
        public static IServiceCollection AddApplicationServices(this IServiceCollection @this)
        {
            // Cart Services
            @this.AddTransient<AddCustomerInformation>();
            @this.AddTransient<AddToCart>();
            @this.AddTransient<GetCart>();
            @this.AddTransient<GetCustomerInformation>();
            @this.AddTransient<Application.Cart.GetOrder>();

            // Orders Services
            @this.AddTransient<CreateOrder>();
            @this.AddTransient<Application.Orders.GetOrder>();

            // Orders Admin Services
            @this.AddTransient<Application.OrdersAdmin.GetOrder>();
            @this.AddTransient<GetOrders>();
            @this.AddTransient<UpdateOrder>();

            // Products Services
            @this.AddTransient<Application.Products.GetProduct>();
            @this.AddTransient<GetProducts>();

            // Products Admin Services
            @this.AddTransient<CreateProduct>();
            @this.AddTransient<DeleteProduct>();
            @this.AddTransient<GetProduct>();
            @this.AddTransient<UpdateProduct>();

            // Stock Admin Services
            @this.AddTransient<CreateStock>();
            @this.AddTransient<DeleteStock>();
            @this.AddTransient<GetStock>();
            @this.AddTransient<UpdateStock>();

            // Users Admin Services
            @this.AddTransient<CreateUser>();

            return @this;
        }
    }
}

在启动类中,我添加了:

services.AddApplicationServices();

[运行应用程序时,程序出现以下错误:

ArgumentException: Cannot instantiate implementation type 'Microsoft.AspNetCore.Http.ISession' for service type 'Microsoft.AspNetCore.Http.ISession'

在我的addCustomerInformation类中,我具有以下构造函数:

public class AddCustomerInformation
{
    private readonly ISession _session;

    public AddCustomerInformation(ISession session)
    {
        _session = session;
    }
}

我不是DI方面的专家,我假设我还需要以某种方式在我的serviceRegister类中注册ISession,不知道该怎么办?我试图将其添加到寄存器中:

this.AddScoped();

但也没有运气,它会抛出一个错误,指出无法找到Session,这就是在添加对Microsoft.AspNetCore.Http的引用之后。我确定我遗漏了一些东西,只是无法弄清楚。

c# dependency-injection service asp.net-core-3.0
1个回答
1
投票

您应该这样注册依赖项:

services.AddScoped<IInterface, Implemantation>();

您需要指定要将特定的interface注册到的implementation。您可以查看documantation了解更多详细信息。

之后,您将像这样注入接口:

public class Service
{
    private readonly IInterface _interface;
    public Service(IInterface interface)
    {
        _interface = interface;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.