Ninject вложенный конструктор аргумент - PullRequest
0 голосов
/ 30 октября 2018

работает способ связывания моих сервисов с вложенными конструкторами, но кажется, что есть лучший способ внедрить эти вложенные конструкторы. Пожалуйста, скажите мне, как правильно сделать это для такого сценария, также, если что-то не так с тем, как я делаю свое приложение, пожалуйста, укажите на это и спасибо!

Пожалуйста, проверьте коды ниже:

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>();
}
...