我有一個帶有用于日志記錄和訪問配置的建構式的類:
public class SendEmaiServiceProvider
{
private readonly IConfiguration _config;
private readonly IWebHostEnvironment _env;
private readonly ILogger<SendEmaiServiceProvider> _logger;
private readonly string _fromEmailAddress;
public SendEmaiServiceProvider(IConfiguration config, IWebHostEnvironment env, ILogger<SendEmaiServiceProvider> logger)
{
_config = config;
_env = env;
_logger = logger;
_fromEmailAddress = _config.GetValue<string>("AppSettings:Email:FromEmailAddress");
}
public void SayHi()
{
Console.WriteLine("Hi");
}
}
問題是 - 如何在不推送的情況下從另一個類呼叫 SayHi 方法logger,env以及config?
不,我用引數初始化新物件,但我確定這是錯誤的:
var sendEmaiServiceProvider = new SendEmaiServiceProvider(_config, _env, _logger);
sendEmaiServiceProvider.SayHi();
我可以創建一個空的建構式,但我沒有_fromEmailAddress價值。
uj5u.com熱心網友回復:
看起來這是一個netcore網站。假設是這樣,那么:
interface為依賴創建一個。- 在中注冊依賴項
Startup.cs - 根據需要從 netcore DI 請求依賴項。
public interface ISendEmaiServiceProvider
{
void SayHi()
}
public class SendEmaiServiceProvider : ISendEmaiServiceProvider
{
public void SayHi() { }
}
然后在 Startup.cs 中:
public void ConfigureServices( IServiceCollection services )
{
services.AddScoped<ISendEmaiServiceProvider, SendEmaiServiceProvider>();
}
然后在控制器(或其他任何使用 DI 的地方)中,在 中請求它.ctor,所有依賴項SendEmaiServiceProvider都將由 DI 自動填充。
public class HomeController : Controller
{
public readonly ISendEmaiServiceProvider _emailService;
public HomeController( ISendEmaiServiceProvider emailService )
{
_emailService = emailService
}
}
那應該能讓你繼續前進。
uj5u.com熱心網友回復:
你應該在這里使用依賴注入。最好在此處創建一個介面并在啟動時決議您的“SendEmaiServiceProvider”。然后使用介面而不是為 SayHi() 方法創建一個新實體。
public interface YourInterface
{
void SayHi()
}
public class SendEmaiServiceProvider : YourInterface
{
public void SayHi()
{
//your code
}
}
在您啟動時,
public void ConfigureServices( IServiceCollection services )
{
services.AddScoped<YourInterface, SendEmaiServiceProvider>();
}
在您的控制器/服務上,
public class YourController : Controller
{
public readonly YourInterface _emailSenderService;
public HomeController( YourInterface emailSenderService )
{
_emailSenderService = emailSenderService
}
public IActionResult SayHI()
{
_emailSenderService.SayHi()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/336531.html
上一篇:以引導程式形式根據條件使文本變灰
