sil*_*der 5 c# asp.net-core-mvc .net-core asp.net-core
我正在实现电子邮件发送模块,并且需要构建URL。我的意图是使用IUrlHelper,但由于它需要提供大量的依赖关系,因此我确实很难构建该对象。
目前,我正在执行此步骤:
ActionContext actionCtx = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
_urlHelper = new UrlHelper(actionCtx);
Run Code Online (Sandbox Code Playgroud)
但是以这种方式构造时,urlHelper在尝试构建URL时仍然会失败,并出现异常。
例外是:
索引超出范围。必须为非负数并且小于集合的大小。参数名称:Microsoft.AspNetCore.Mvc.Routing.UrlHelper.get_Router()上System.Collections.Generic.List`1.get_Item(Int32 index)处System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument参数,ExceptionResource资源)处的索引
所以现在可能需要创建和设置IRouter实例,但是正如我所看到的,再次需要设置大量的deps
那么应该如何正确完成呢?
正如您所见,在完全断开连接的库中实现这一目标几乎是不可能的。更重要的是,您需要路由才能使其有价值,这些路由将被完全限制在单独的 Web 应用程序中,您的库必须具有硬依赖才能访问。如果它不明显,那将是一个非常糟糕的设计选择。
我认为你需要退后一步重新评估。如果您的目标只是通过外部进程发送电子邮件,那么无论在那里安排任务(大概是您的 Web 应用程序),都应该向其传递该电子邮件所需的信息,包括任何 URL。这将创建这些 URL 的责任从您的电子邮件库(无论如何实际上不应该承担此责任 - 做一件事并做好)转移回可能已经具有必要能力的来源。
如果由于某种原因无法做到这一点。我想说,您的下一个最佳选择是在您尝试为其生成 URL 的 Web 应用程序上设置一个或多个端点,并让这些端点返回您需要的 URL 和/或电子邮件库发送电子邮件所需的任何其他附加信息。电子邮件。这仍然外部化了电子邮件发送功能,但为您的图书馆提供了一种在需要时从 Web 应用程序访问信息的干净方法。
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |