2012-04-05 114 views
0

我在ASP.NET MVC項目中使用Ninject進行依賴注入。我有很多存儲庫類,每個類都在構造函數中使用連接字符串參數。使用Ninject解析連接字符串

當前爲每個映射我也要傳遞連接字符串。

Ex。

Bind<INewsRepository>().To<NewsRepository>().WithConstructorArgument("connectionString", "Data Source=..."); 
Bind<IProductsRepository>().To<ProductsRepository>().WithConstructorArgument("connectionString", "Data Source=..."); 

是否有可能將「connectionString」直接綁定到全局級別的配置值而不是在每個綁定處指定?

回答

4

我的解決辦法是: 將連接字符串包裝在一個對象中,比如說ConnectionStringWrapper並創建一個Interface IConnectionStringWrapper。使用存儲庫中的接口並使用Ninjects將ConnectionStringWrapper綁定到接口。

+0

爲什麼將連接字符串包裝在一個額外的接口中?爲什麼不將連接字符串綁定到每個存儲庫的類構造函數?哪裏將每個IConnectionStringWrapper綁定到repo構造函數的優點? – Elisabeth 2013-12-30 12:46:54

+0

這是所有關於保持在一個地方。如果要更改連接字符串,只需在ConnectionStringWrapper類中進行更改。如果您有多個ConnectionStringWrapper類,比如測試,驗收和生產,那麼該接口很有用。您可以使用Ninject將正確的類綁定到接口。 – Wim 2014-01-02 09:29:18

3

這是最好的,我拿出

創建擴展方法

public static class IBindingExtensions 
    { 
     public static IBindingWithOrOnSyntax<T> WithConnectionString<T>(this IBindingWhenInNamedWithOrOnSyntax<T> binding) 
     { 
      return binding.WithConstructorArgument("connectionString", "Data Source=.."); 
     } 
    } 

,並調用它的每一個連接字符串參數結合

Bind<INewsRepository>().To<NewsRepository>().WithConnectionString();