2017-07-23 180 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。

相關問題