c# - 依赖注入 - 目录注入一个类到另一个类
问题描述
我有一个具有以下结构的 MailRepository 类:
public class MailRepository : IMailRepository
{
public MailRepository()
{
}
public async Task SendMail(string subject, string content, string recipientAddress)
{
}
}
我还有一个带有以下代码的 LocalizationReposiory 类:
public class LocalizationRepository : ILocalizationRepository
{
private readonly IStringLocalizer<LocalizationRepository> _localizer = null;
public LocalizationRepository(IStringLocalizer<LocalizationRepository> localizer)
{
_localizer = localizer;
}
public string TranslateSetting(string settingName, params string[] additionalParams)
{
return _localizer.GetString(settingName, additionalParams);
}
}
这就是我从一个类中调用 MailRepository 中的SendMail方法的方式:
var subject = _localizationRepository.TranslateSetting("Subject");
var content = _localizationRepository.TranslateSetting("Body");
await _mailRepository.SendMail(subject, content, "xyz@yahoo.com");
这是启动中的依赖注入的样子:
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IMailRepository>(services => new MailRepository());
builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
builder.Services.Configure<RequestLocalizationOptions>(opts =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US")
};
opts.DefaultRequestCulture = new RequestCulture("en-US");
opts.SupportedCultures = supportedCultures;
opts.SupportedUICultures = supportedCultures;
});
builder.Services.AddSingleton<ILocalizationRepository, LocalizationRepository>();
}
}
有没有办法将 LocalizationRepository 直接注入 MailRepository 以避免在多个类中重复以下代码行?
var subject = _localizationRepository.TranslateSetting("Subject");
var content = _localizationRepository.TranslateSetting("Body");
await _mailRepository.SendMail(subject, c,ontent "xyz@yahoo.com");
解决方案
注入ILocalizationRepository
_MailRepository
public MailRepository(ILocalizationRepository localizationRepo)
{
//set private var
}
然后更改您在服务提供商中的注册方式
builder.Services.AddSingleton<IMailRepository, MailRepository>();
推荐阅读
- r - 使用 nanor 的多个变量的 recode_shadow
- r - 如何在R中合并两个大小相同的矩阵?
- java - 无法在jsp文件中传递值
- node.js - Docker 构建显示无效的 containerPort
- flutter - 创建一个 Card 小部件并多次调用它
- php - Left Join - 在 Eloquent 中
- pandas - 如何从数据中删除索引?
- python-3.x - 应用 groupby 函数后如何保留 pyspark 数据帧的特定列值?
- c# - 您如何在数据库中存储动态站点设置?
- google-chrome-extension - 我是否必须在 Chrome 扩展程序的 manifest.json 中包含“update_url”:“https://clients2.google.com/service/update2/crx”?