c# - 初始化接口的正确方法是什么?
问题描述
我的不是 WEB 应用程序。这完全是 C# 库。我的界面非常简单,并且在一个单独的 C# 库中:
public interface IDataRepository
{
Task<string> GetAppSettingAsync(string name);
}
我正在另一个 C# 库中访问此 DLL。
public class BaseConsumer
{
public IDataRepository DataRepository => new DataRepository();
public async Task<string> AppSetting()
{
return await DataRepository.GetAppSettingAsync("name");
}
}
在 web/windows 应用程序中,我们通过构造函数进行依赖注入和注入存储库/服务。在这里我没有那个选择,因为我的库有无参数的构造函数。
我怎样才能得到IDataRepository
而不是使用 new 初始化它DataRepository
?
解决方案
这不遵循正常的 DI 模式。但如果其他解决方案失败,这可能会有所帮助。您可以只使用您的 DI 进行绑定:
MyDIFramework.Bind<IDataRepository>().To<DataRepository>();
如果您使用的是 Autofac,它将如下所示:
builder.RegisterType<DataRepository>().As<IDataRepository>();
然后您可以在需要时解决它:
var dataRepository = DependencyResolver.Current.GetService<IDataRepository>();
这样你就可以保持无参数。
推荐阅读
- javascript - 单页应用程序中分页中的 Python Web Scraping
- pyspark - 类型错误:结构类型'int'-databricks中的Pyspark
- java - 如何从 NotificationListener 获取大小图标
- angular-material - 带角度的响应式菜单
- python - Python列表迭代耗尽
- c# - 单个文档的自定义操作 ID,而不是其他文档
- netcdf - 有没有办法使用 CDO 裁剪多个 netcdf 文件?
- ios - 设置包未显示在 iPhone(IOS 9.3.5)设置中
- python-3.x - 使用 concat 时调整图像大小
- ruby-on-rails - FactoryBot 属性似乎对方法不可见