В общем, вы можете определить сервис для внедрения в каждое представление, используя _ViewImports.cshtml
.Просто добавьте туда свою инъекцию представлений, и служба будет доступна для каждого представления.
Однако вам не следует делать это с любой из трех служб, которые вы прямо упомянули.Во-первых, IHttpContextAccessor
не является необходимым, поскольку вы можете получить HttpContext
в вашем представлении через ViewContext.HttpContext
.Аналогично, IHostingEnvironment
также в основном не требуется, поскольку вы можете использовать помощник по тегам environment
:
<environment include="Development">
<p>This is development.</p>
</environment>
<environment exclude="Development">
<p>This is production.</p>
</environment>
Для UserManager<AppUser>
такой сервис лучше включать только тогда, когда он действительно вам нужен.Если вы обнаружите, что снова и снова используете одну и ту же логику, требуя эту услугу, рассмотрите возможность создания помощника по тегам или компонента представления вместо того, чтобы инкапсулировать эту логику таким образом, чтобы вы могли использовать ее в нескольких местах, не добавляя ничего особенного в ваше представление.
И наконец, поскольку основной темой этого обсуждения было главным образом не отправлять электронную почту в процессе разработки, лучшим подходом является просто замена SMTP-сервера на что-то локальное в разработке.Есть приложение под названием Papercut , которое с открытым исходным кодом и бесплатно и делает отправку / получение электронной почты в процессе разработки на одном дыхании.По умолчанию он будет привязан к localhost: 25, поэтому вам просто нужно поменять с ним ваше реальное SMTP-соединение.Например, вы можете создать раздел в вашем appsettings.json, например:
"Smtp": {
"Host": "localhost",
"Port": 25,
"EnableSsl": false,
"Username": "",
"Password": ""
}
Затем при запуске:
services.AddSingleton(_ => {
var config = Configuration.GetSection("Smtp").Get<SmtpConfig>();
return new SmtpClient
{
Host = config.Host,
Port = config.Port,
EnableSsl = config.EnableSsl,
Credentials = new NetworkCredential(config.Username, config.Password)
};
});
Затем просто введите SmtpClient
в свою электронную почту.обслуживание, и вы отправляетесь в гонки.В производственной среде вы можете использовать переменные среды или хранилище ключей Azure для изменения настроек производственного SMTP-соединения.Для этого лучше не использовать appsettings.json (или appsettings.Production.json), так как вы, скорее всего, не захотите фиксировать его в вашем контроле исходного кода.