2012-04-05 72 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();