работает способ связывания моих сервисов с вложенными конструкторами, но кажется, что есть лучший способ внедрить эти вложенные конструкторы.
Пожалуйста, скажите мне, как правильно сделать это для такого сценария, также, если что-то не так с тем, как я делаю свое приложение, пожалуйста, укажите на это и спасибо!
Пожалуйста, проверьте коды ниже:
AuthorController.cs
public class AuthorsController : Controller
{
IAuthorService authorService;
public AuthorsController(IAuthorService _authorService)
{
authorService = _authorService;
}
}
AuthorService.cs
public class AuthorService :IAuthorService
{
IAuthorRepository repo = null;
public AuthorService(IAuthorRepository _authorRepository)
{
repo = _authorRepository;
}
}
AuthorRepository
public class AuthorRepository : IAuthorRepository
{
MyContext Context = null;
public AuthorRepository(MyContext _context)
{
Context = _context;
}
}
NinjectWebCommon.cs
private static void RegisterServices(IKernel kernel)
{
MyContext db = new MyContext();
//this is where i have my doubts
kernel.Bind<IAuthorService>().ToConstructor(x =>
new AuthorService(new AuthorRepository(db))
);
}
РЕДАКТИРОВАТЬ: после нескольких попыток я нашел другой способ достижения своей цели, который, я думаю, намного чище (примечание: я не знаю, как он автоматически находит параметр MyContext в AuthorRepository, но это так)
2-й путь:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IAuthorService>().To<AuthorService>();
kernel.Bind<IAuthorRepository>().To<AuthorRepository>();
}