use*_*921 8 linq asp.net-mvc ninject ioc-container
我是Ninject的新手,正在尝试使用MVC和Linq的Ninject 2.我有一个SqlProductRepository类,所有我想知道的是,如果我在控制器中注入Repository对象,那么在构造函数中传递connectionstring的最佳方法是什么.
public class SqlProductRepository:IProductRepository
{
private Table<Product> productsTable;
public SqlProductRepository(string connectionString)
{
productsTable = (new DataContext(connectionString)).GetTable<Product>();
}
public IQueryable<Product> Products
{
get { return productsTable; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的ProductController类,我注入了Repository:
public class ProductsController : Controller
{
private int pageSize = 4;
public int PageSize { get { return pageSize; } set { pageSize = value; } }
IProductRepository _productsRepository;
[Inject]
public ProductsController(IProductRepository productRepository)
{
_productsRepository = productRepository;
}
public ViewResult List(int page)
{
return View(_productsRepository.Products
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList()
);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以指导我这个吗?
Ian*_*vis 15
您可以在绑定中进行设置
_kernel.Bind<IProductRepository>()
.To<SqlProductRepository>()
.WithConstructorArgument("connectionString",yourConnectionString );
Run Code Online (Sandbox Code Playgroud)
你在做:
new DataContext(connectionString)
Run Code Online (Sandbox Code Playgroud)
在你的代码中 - 这是你正试图通过使用DI容器推出代码的类的新方法和绑定.至少,考虑添加一个IConnectionStringSelector接口或类似的东西.您不希望对20 Bind个存储库进行20次调用 - 您需要更高级别的抽象.
我建议最好的解决方案是你应该要求一个IDataContext或一个IDataContextFactory在构造函数中,并让它担心它.
| 归档时间: |
|
| 查看次数: |
4327 次 |
| 最近记录: |