Вы можете указать строку подключения в качестве аргумента конструктора при привязке SqlProductRepository
к интерфейсу IProductRepository
.
public class LinqToSqlModule : NinjectModule
{
public override void Load()
{
Bind<IProductRepository>().To<SqlProductRepository>()
.WithConstructorArgument(connectionString, "connectionstring");
}
}
Я бы предложил немного другой подход. Прежде всего, вы можете захотеть создать привязку для класса DataContext
в ядре. Вы можете сделать это, используя класс провайдера для создания DataContext
передачи строки соединения в качестве аргумента своему конструктору. Затем вы связываете DataContext
с DataContextProvider
.
public class DataContextProvider : Provider<DataContext>
{
protected override DataContext CreateInstance(IContext context)
{
string connectionString = "connectionstring";
return new DataContext(connectionString);
}
}
public class LinqToSqlModule : NinjectModule
{
public override void Load()
{
Bind<DataContext>().ToProvider<DataContextProvider>();
Bind<IProductRepository>().To<SqlProductRepository>();
}
}
Затем измените конструктор класса SqlProductRepository
, чтобы вместо него принять объект DataContext
.
public class SqlProductRepository : IProductRepository
{
private readonly DataContext context;
public ProductRepository(DataContext context)
{
this.context = context;
}
public IQueryable<Product> Products
{
get { return context.GetTable<Product>(); }
}
}
Кстати, вам не нужно украшать конструктор атрибутом Inject
. Ninject выберет конструктор с большинством параметров по умолчанию.