ASP.NET DI
unknown
csharp
3 years ago
2.5 kB
10
Indexable
builder.services.AddScoped<ICompanyService, CompanyService>()
.AddScoped<ICompanyRepository, CompanyRepository>()
// Adding BC/Service to the DI container as Scoped means it will automatically be injected into any controller that takes an ICompanyService as a contructor argument
// Also registering the repository class as Scoped and having the BC/Service take an ICompanyRepository means that when the DI container injects the ICompanyService instance into the controller constructor, it sees that the BC needs an ICompanyRepository as a constructor argument, and since that type is registered in the container, it is in turn injected into the ICompanyService instance that is injected into the controller.
public class CompanyController : Controller
{
private ICompanyService _companyService;
public CompanyController(ICompanyService companyService)
{
// When the controller is created in response to a http request, the DI container sees that it
// wants an ICompanyService as an argument, which is registered in the DI container, so it passes
// a request scoped instance of the assigned concrete implementation into the constructor.
// However, it also sees that upon instantiating a CompanyService (concrete implementation of ICompanyService),
// it sees that the CompanyService in turn also requires a constructor argument.
// Since we have also registered what the CompanyService wants in its constructor, the DI container then passes
// a request scoped instance of CompanyRepository (the concrete implementation of ICompanyRepository that we specified)
_companyService = companyService;
}
[HttpGet]
public IActionResult GetAllCompanies()
{
// Cool validation logic stuff here
return _companyService.GetAllCompanies();
}
}
public interface ICompanyService
{
IEnumerable<Company> GetAllCompanies();
}
public class CompanyService : ICompanyService
{
private ICompanyRepository _companyRepository;
public CompanyBC(ICompanyRepository companyRepository)
{
_companyRepository = companyRepository;
}
public IEnumerable<Company> GetAllCompanies()
{
return _companyRepository.GetAllCompanies();
}
}
public interface ICompanyRepository
{
IEnumerable<Company> GetAllCompanies();
}
public class CompanyRepository : ICompanyRepository
{
public IEnumerable<Company> GetAllCompanies()
{
// Cool DB access stuff here
}
}
Editor is loading...