Вы должны использовать привязку Ninject следующим образом.
kernel.Bind<IUnitOfWork>().To<UnitOfWork>()
.WithConstructorArgument("connectionString", context => MvcApplication.GetConnectionStringName());
Обратите внимание, что context
здесь относится к типу Ninject IContext
и поэтому не имеет ничего общего с HttpContext
.
* 1008.* В любом случае, я думаю, что ваш подход подходит для этого.
Иногда (особенно, когда нужно ввести несколько связанных параметров), я предпочитаю создавать интерфейс и конкретные реализации для конфигураций и позволять им вводить стандартные привязки, подобные этой.
public interface IUnitOfWorkConfiguration {
string ConnectionString { get; }
}
public class AppConfigUnitOfWorkConfiguration : IUnitOfWorkConfiguration {
public string ConnectionString { get { ... } }
}
public class UnitOfWork {
public UnitOfWork(IUnitOfWorkConfiguration configuration) {
}
}
Bind<IUnitOfWorkConfiguration>().To<AppConfigUnitOfWorkConfiguration>();
Используя этот подход, вы можете избежать указания имен параметров в виде строковых литералов.
Еще одно замечание об использовании HttpContext
.Я не рекомендую использовать его таким образом из-за проблем безопасности потоков.Вы должны либо пометить свое личное статическое поле _context
с атрибутом [ThreadStatic]
, либо в качестве лучшего выбора просто использовать HttpContext.Current
везде.