[英]What is the best way to merge into one same services injected in several constructors?
我正在开发 ASP.net 核心应用程序,当然还使用依赖注入。 主要是在页面或其他服务的构造函数中注入所需的服务。 其中一些注入的服务在几乎所有其他构造函数中都是相同的。 例如,有ILogger<T>
,一个IAppInfo
保存一些应用程序范围的信息,还有一个IFileServices
用于许多其他服务。 所以我最终在构造函数中进行了大量注入,超过 7 个。问题是,这是摆脱几乎每个构造函数中使用的所有参数的最佳方法吗?
现在,我已经实现了另一个服务,其中包含获取所需服务的方法:
public interface IBasicsService<out T>
{
ILogger<T> GetLogger();
ApplicationInfo GetApplicationInfo();
}
实施于:
public class BasicsService<T> : IBasicsService<T>
{
private readonly ILogger<T> _logger;
private readonly ApplicationInfo _info;
// ReSharper disable once ContextualLoggerProblem
public BasicsService(ApplicationInfo info, ILogger<T> logger) {
_info = info;
_logger = logger;
}
public ILogger<T> GetLogger() {
return _logger;
}
public ApplicationInfo GetApplicationInfo() {
return _info;
}
}
那是对的吗? 注入IServiceProvider
并用它解决服务是否更好? 谢谢你。
最好不要使用 IServiceProvider 它隐藏了你的服务的依赖假设在某些情况下你想测试这个服务 oops 你被迫模拟 IserviceProvider。 你要做的任务和用ServiceLocator没什么区别 这个链接可以帮你看看为什么用ServiceLocator不好
但是,如果您真的想在任何情况下都这样做,构造函数注入并不是您可以用来注入依赖项的唯一方法。 还有一种方式叫做属性注入 这是一个很好的关于属性注入的讨论
不要忘记你可以配置 asp.net core 来使用其他一些支持属性注入的 IOC 容器,比如 Castle Windsor 或 Unity
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.