2017-07-23 181 views
0

我有一个Web应用程序目标.net核心。 我也创建了一个针对.net核心的类库。如何通过依赖项注入IOptions到另一个项目

我创建下面这个小巧玲珑的教程Here

这将是很好的能够提供在启动注入了WebApplication的进入项目,将数据访问层的选项用户库。

以下是单独项目中Users Repository的代码。

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

+0

什么阻止你这么做?具有其他项目引用选项扩展库并使用该接口,然后将该存储库与组合根一起注册。 – Nkosi

+0

@Nkosi那些实际上是你说的话:P –

+0

我不太理解你最后的评论。您是否删除了以前的评论,将最后一个评论置于上下文中? – Nkosi

回答

0

一个可能的设计是使一个新的接口为您的类库中的资源库配置,并让您MyOptions键入实现该接口。

例如,在你的类库,你可以做到以下几点:

public interface IRepositoryConfig 
{ 
    string ConnectionString { get; } 
} 

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

而在你的WebAPI启动类,你可以这样使用,如下所示:

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。

相关问题