gpt4 book ai didi

asp.net-core - 如何通过依赖注入(inject)将 IOptions 传递给另一个项目

转载 作者:行者123 更新时间:2023-12-04 03:05:10 25 4
gpt4 key购买 nike

我有一个针对 .net 核心的 WebApplication。
我还创建了一个针对 .net 核心的类库。

我正在按照这个 Dapper 教程 Here 创建一个用户存储库

如果能够将在 WebApplication 启动时注入(inject)的选项提供到将成为数据访问层的项目中,那就太好了。

这是单独项目中用户存储库的代码。

class UsersRepository
{
private readonly MyOptions _options;
private string connectionString;
public UsersRepository(IOptions iopt/// insert Option here )
{
_options = iopt.Value;
connectionString = _options.connString;
}

public IDbConnection Connection
{
get
{
return new SqlConnection(connectionString);
}
}

WebApplication Project Startup 如下所示。
public class Startup
{

public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();

services.Configure<MyOptions>(Configuration);

services.AddMvc();
}

当然还有 MyOptions是 Web 应用程序中的一个类,它只有一个属性 connString

最佳答案

一种可能的设计是在类库中为您的存储库配置创建一个新接口(interface),并让您的 MyOptions 类型实现该接口(interface)。

例如,在您的类库中,您可以执行以下操作:

public interface IRepositoryConfig
{
string ConnectionString { get; }
}

public class UserRepository
{
public UserRepository(IRepositoryConfig config)
{
// setup
}
}

在您的 WebAPI Startup 类中,您可以按如下方式进行连接:
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();

services.Configure<MyOptions>(Configuration);

services.AddMvc();

services.AddScoped<IRepositoryConfig>(s =>
s.GetService<IOptions<MyOptions>>().Value
);

services.AddScoped<UserRepository>();
}

这样做将允许您使用 Asp.Net Core 配置/选项框架,而无需直接引用类库中的任何 Asp.Net DLL。

关于asp.net-core - 如何通过依赖注入(inject)将 IOptions 传递给另一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45268519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com