我正在将依赖项注入应用于我的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的引用之后。我确定我遗漏了一些东西,只是无法弄清楚。
您应该这样注册依赖项:
services.AddScoped<IInterface, Implemantation>();
您需要指定要将特定的interface
注册到的implementation
。您可以查看documantation了解更多详细信息。
之后,您将像这样注入接口:
public class Service
{
private readonly IInterface _interface;
public Service(IInterface interface)
{
_interface = interface;
}
}