MVC Controller - Внедрить 2 репозитория в контроллер - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь внедрить второй репозиторий в мой контроллер asp.net mvc 3. И я не могу заставить его работать, не уверен, где «добавить еще», используя Ninject.

У меня есть функция void в global.asa.cs

kernel.Bind<INewsRepository>().To<NewsRepository>();

И в моем контроллере у меня есть:

private INewsRepository _newsRepository;
private IContentRepository _contentRepository;

public NewsController(INewsRepository newsRepository, IContentRepository contentRepository)
{
    this._newsRepository = newsRepository;
    this._contentRepository = contentRepository;
}

Как я могу зарегистрировать IContentRepository для NewsController?

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Я использую autofac вместо Ninject, но основы остаются прежними.

Если вы впервые применили инъекцию зависимостей, вы сможете связывать и других. Вам просто нужно добавить новую привязку в Application_Start () в вашем Global.asax.

Так что при первом связывании сделайте это также:

kernel.Bind<IContentRepository>().To<ContentRepository>();

Вы можете иметь столько привязок, сколько хотите.

2 голосов
/ 19 октября 2011

Прежде всего, это хорошая практика, чтобы перенести загрузку вашего приложения в отдельную папку. Это сохраняет ваш Global.asax в чистоте.

Вы также должны использовать условную регистрацию. В итоге вы сэкономите много времени для привязок, которые вам не нужно настраивать.

Так что для вас я бы, вероятно, предложил следующее

public static class Bootstrapper()
{
   public static void Bootstrap()
   {
      kernel.Scan( k =>  
      {  
         k.FromAssemblyContaining<INewsRepository>();  
         k.BindWithDefaultConventions();  
       });  
   }
}

И в свой Global.asax вы добавляете это ..

Bootstrapper.Bootstrap();

Тогда я бы посоветовал вам потратить некоторое время на то, чтобы Google читал о девяти соглашениях.

...