首页 > 解决方案 > 初始化接口的正确方法是什么?

问题描述

我的不是 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

标签: c#

解决方案


这不遵循正常的 DI 模式。但如果其他解决方案失败,这可能会有所帮助。您可以只使用您的 DI 进行绑定:

MyDIFramework.Bind<IDataRepository>().To<DataRepository>();

如果您使用的是 Autofac,它将如下所示:

builder.RegisterType<DataRepository>().As<IDataRepository>();

然后您可以在需要时解决它:

var dataRepository = DependencyResolver.Current.GetService<IDataRepository>();

这样你就可以保持无参数。


推荐阅读