2016-10-05 2 views
1

В моем базовом веб-API ASP.NET мне нужно использовать MongoDb. Ниже приводится моя реализация до сих пор, но я застрял в разрешении зависимостей.Инъекция зависимостей для сторонних данных в ядре ASP.NET

DataContext:

public class AppDbContext 
    { 
     public IMongoDatabase MongoDatabase { get; set; } 
     public AppDbContext() 
     { 
      var client = new MongoClient("mongodb://localhost:27017"); 
      MongoDatabase = client.GetDatabase("cse-dev-db"); 
     } 
    } 

Repository:

public class BuyRepository: IBuyRepository { 
    private readonly AppDbContext _appDbContext; 
    public BuyRepository(AppDbContext appDbContext) { 
     _appDbContext = appDbContext; 
    } 
    public Buy Add(Buy buy) { 
     _appDbContext.MongoDatabase.GetCollection<Buy("Buy").InsertOne(buy); 
     return buy; 
    } 
} 

Контроллер:

private readonly BuyRepository _buyRepository; 
public ValuesController(BuyRepository buyRepository) { 
    _buyRepository = buyRepository; 
} 

Мой вопрос час ой, чтобы добавить эти зависимости в ConfigureServices

public void ConfigureServices(IServiceCollection services) { 
    services.AddApplicationInsightsTelemetry(Configuration); 
    services.AddMvc(); 
    // How to add dependencies here 
} 

PS: Я уже видел this, но он не работает.

Update

Я попытался, как за комментарий пользователем

public void ConfigureServices(IServiceCollection services) 
     { 
      // Add framework services. 
      services.AddApplicationInsightsTelemetry(Configuration); 
      services.AddScoped<AppDbContext>(); 
      services.AddMvc(); 
      services.AddScoped<IBuyRepository, BuyRepository>(); 
     } 

Теперь я получаю следующее исключение

Не удалось разрешить услугу типа «CseApi.Repositories.BuyRepository 'при попытке активировать ' CseApi.Controllers.ValuesController '.

+0

Я не уверен, если это не работает, мне нужно, чтобы проверить его вручную. Странно, что статья mongo db post не тестируется. – mybirthname

+0

Вы используете пакет NuGet для поддержки поддержки MongoDB? – mtaanquist

+0

Да '' mongocsharpdriver ":" 2.3.0 "' –

ответ

3

Попробуйте зарегистрировать такие услуги, как:

public void ConfigureServices(IServiceCollection services) { 
    services.AddApplicationInsightsTelemetry(Configuration); 
    services.AddScoped<AppDbContext>(); 
    services.AddScoped<IBuyRepository, BuyRepository>(); 
    services.AddMvc(); 
    // How to add dependencies here 
} 

Обновление для комментариев код

Контроллер должен быть чем-то, как показано ниже:

private readonly IBuyRepository _buyRepository; 
public ValuesController(IBuyRepository buyRepository) { 
    _buyRepository = buyRepository; 
} 
+0

Это исключение исключения. Невозможно разрешить службу для типа CseApi.Repositories.BuyRepository при попытке активировать 'CseApi.Controllers.ValuesController'' –

+0

Ваш контроллер должен принимать 'IBuyRepository''''''''Раздел покупки'. См. Мое обновление. –

+0

Да Это была проблема. спасибо –

0

Обновление впрыска вашего контроллера от этого:

private readonly BuyRepository _buyRepository; 

к этому:

private readonly IBuyRepository _buyRepository; 
Смежные вопросы