Я новичок, когда дело доходит до DI и ninject, и я немного борюсь о том, когда произойдет фактическая инъекция, и как начать связывание.
Я использую его уже в своем веб-приложении, и он отлично работает там, но теперь я хочу использовать инъекции в библиотеке классов.
Скажем, у меня есть класс вроде этого:
public class TestClass
{
[Inject]
public IRoleRepository RoleRepository { get; set; }
[Inject]
public ISiteRepository SiteRepository { get; set; }
[Inject]
public IUserRepository UserRepository { get; set; }
private readonly string _fileName;
public TestClass(string fileName)
{
_fileName = fileName;
}
public void ImportData()
{
var user = UserRepository.GetByUserName("myname");
var role = RoleRepository.GetByRoleName("myname");
var site = SiteRepository.GetByID(15);
// Use file etc
}
}
Я хочу использовать инъекцию свойств здесь, потому что мне нужно передать имя файла в моем конструкторе. Правильно ли я говорю, что если мне нужно передать в конструкторе параметр, я не могу использовать конструктор инъекции? Если я могу использовать инъекцию конструктора с дополнительными параметрами, как это сделать Я передаю эти параметры в?
У меня есть консольное приложение, которое потребляет класс Test, который выглядит как следующим образом:
class Program
{
static void Main(string[] args)
{
// NinjectRepositoryModule Binds my IRoleRepository etc to concrete
// types and works fine as I'm using it in my web app without any
// problems
IKernel kernel = new StandardKernel(new NinjectRepositoryModule());
var test = new TestClass("filename");
test.ImportData();
}
}
Моя проблема в том, что когда я вызываю test.ImportData()
, мои репозитории равны нулю - в них ничего не вводилось. Я попытался создать еще один модуль и вызвать
Bind<TestClass>().ToSelf();
поскольку я думал, что это может разрешить все свойства инъекции в TestClass
, но я никуда не буду.
Я уверен, что это тривиальная проблема, но я просто не могу понять как это сделать.