我试图将代码从控制器分离到我创建的服务。我所做的是创建一个带有接口 IUserService 的用户服务。
将 RegisterUser 代码从直接控制器移动到 UserService,我得到的下一个挑战是直接与控制器一起使用的 Url 不能与服务一起使用。
这段从 Controller 到 Service 的代码已更改如下:
如果在控制器中
var callbackUrl = Url.EmailConfirmationLink(user.Email, token, model.contactno, Request.Scheme);
Run Code Online (Sandbox Code Playgroud)
从控制器更改为服务:
private IUrlHelper _urlHelper;
public UserService (IUrlHelper urlHelper, HttpRequest request) {
_urlHelper = urlHelper;
}
Run Code Online (Sandbox Code Playgroud)
这是构造函数,
在方法中我这样称呼它:
var callbackUrl = _urlHelper.EmailConfirmationLink (user.Email, token, U.Email, _request.Scheme);
Run Code Online (Sandbox Code Playgroud)
我在 Startup.cs 的 DI 中这样提到:
services.AddScoped<IUserService, UserService>();
Run Code Online (Sandbox Code Playgroud)
编译时没有异常。在运行时,它抛出以下异常:
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Mvc.IUrlHelper' while attempting to activate 'erp.Services.UserService'.
Run Code Online (Sandbox Code Playgroud)
不是很清楚到底要做什么。
这是完整的堆栈跟踪,可以更仔细地查看错误。好吧,我不能说确切的行,因为我不是在调试,而只是从日志中复制: …