#asp.net-mvc #dependency-injection #ninject
#asp.net-mvc #внедрение зависимостей #ninject
Вопрос:
Я использую Ninject с ASP.NET MVC. По сути, я хочу передать защищенный элемент _connectionStringBuilder в классе BaseController в качестве аргумента конструктора классу SourceCodeManager.
Я в основном выполняю некоторую обработку на уровне контроллера, а затем хочу передать это в мои различные классы бизнес-уровня, такие как SourceCodeManager.
Я знаю, это звучит немного странно, но я в основном хочу передать одну и ту же переменную _connectionStringBuilder всем моим классам бизнес-уровня. (Я пытаюсь обновить классическое приложение ASP, где они хранят имя пользователя и пароль в файлах cookie!)
public class SourceCodeManager : ParisDataAccessManager, ISourceCodeManager
{
SourceCodeManager(IParisConnectionStringBuilder connectionStringBuilder)
: base(connectionStringBuilder)
{
}
public List<SourceCodeList> GetManualSourceCodes()
{
using (var connection = new SqlConnection(connectionStringManager.GetConnectionString()))
{
connection.Open();
var manualSourcesCodes = connection
.Query<SourceCodeList>("select source_cd, source_desc where feeder_system_cd = 'ME'")
.ToList();
return manualSourcesCodes;
}
}
}
public class BaseController : Controller
{
[Inject]
public IParisConnectionStringBuilder _connectionStringBuilder { get; set; }
// ...
}
Ответ №1:
Я не на 100% понимаю, в чем заключается ваш вопрос.
Однако, если вам нужен только один экземпляр IParisConnectionStringBuilder во всем вашем приложении, посмотрите на регистрацию в качестве синглтона в NInject.
Синтаксис выглядит примерно так:
Bind<IParisConnectionStringBuilder>().To<ParisConnectionStringBuilder>().InSingletonScope();
Комментарии:
1. Спасибо, это решило проблему! Я внедряю конкретную реализацию IParisConnectionStringBuilder в класс BaseController, используя InSingletonScope(), и тот же экземпляр передается конструктору всех моих классов бизнес-уровня.