좋아, 나는 분명히 여기서 어리석은 일을하고 있지만 그것을 찾을 수없는 것 같습니다.
나는 처음 면도기 페이지 응용 프로그램을 작성하고 만든거야 EmailSender
하는 구현 클래스를 IEmailSender
. 또한 EmailSender
생성자는 EmailSettings
매개 변수를 받습니다 . EmailSettings
다음과 같이 구현됩니다.
appsettings.json
"EmailSettings": {
"Host": "****.*****.com",
"Port": "587",
"UserName": "****@**********.com",
"Password": "***********",
"FromAddress": "****@**********.com",
"EnableSsl": "true"
},
EmailSettings.cs
public class EmailSettings
{
public string Host { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FromAddress { get; set; }
public bool EnableSsl { get; set; }
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.AddSingleton<IEmailSender, EmailSender>();
}
이것은 내가 읽은 기사 에서 취한 기본적인 접근 방식을 따른다 . 하지만 앱을 실행하면 즉시 예외가 발생합니다.
System.AggregateException : '일부 서비스를 생성 할 수 없습니다 (서비스 설명자'ServiceType : Microsoft.AspNetCore.Identity.UI.Services.IEmailSender 수명 : 일시적인 구현 유형 : Bamtok.Services.EmailSender '를 확인하는 동안 오류가 발생했습니다.': 서비스를 확인할 수 없습니다. 'Bamtok.Services.EmailSender'활성화를 시도하는 동안 'Bamtok.Services.EmailSettings'유형에 대해) '
어떻게 든 생성자 EmailSettings
에게 전달할 인스턴스를 인스턴스화 할 수 없습니다 EmailSender
.
내가 놓친 것을 누구든지 볼 수 있습니까?
Configure<T>
레지스터 IOptions<EmailSettings>
및 언급했듯이 EmailSettings
종속 클래스에 주입 했습니다.
클래스를 그대로두고 리팩터링 할 수 있습니다. Startup
public void ConfigureServices(IServiceCollection services) {
// ...
EmailSettings settings = Configuration.GetSection("EmailSettings").Get<EmailSettings>();
services.AddSingleton(settings);
services.AddSingleton<IEmailSender, EmailSender>();
}
또는IOptions<T>
종속성 을 예상하도록 클래스를 업데이트하십시오.
public class EmailSender : IEmailSender {
private readonly EmailSettings emailSettings;
public EmailSender(IOptions<EmailSettings> emailSettings) {
this.emailSettings = emailSettings.Value;
}
//...
}
후자의 제안과 전자의 차이점은 구현이 프레임 워크 문제와 결합되지 않는다는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다