У меня есть следующий сценарий: я получил услугу ICompanyDocumentsService
с одной реализацией CompanyDocumentsService
, которую я регистрирую в своем Startup
классе:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ICompanyDocumentService, CompanyDocumentService>();
}
Мне нужна эта служба во многих местах, и это не беспокоит меня, используя DI в конструкторе. Тем не менее, есть одно место, где мне нужно, чтобы он был введен в метод (или, возможно, в свойстве было бы еще лучше):
public abstract class CompanyDocumentBase
{
public abstract object GetAllProperties(Employee employee, string properties,
CompanyDocumentReferenceData documentReferenceData);
// blah, blah, lots of Formatting Methods
private CompanyDocumentService CompanyDocumentService { get; set; } // **inject service here**
public string GetFormattedEmployeeIndividualEmploymentAgreementNumber(Employee employee,
ICompanyDocumentService companyDocumentService = null) // **optional because
//inherited class doesn't need to know anything about this service, it concerns only it's result**
{
companyDocumentService = CompanyDocumentService;
var test =
companyDocumentService.GetEmloyeeIndividualEmploymentAgreementNumber(employee.Id);
return string.Empty;
}
}
Есть много классов, наследующих CompanyDocumentBase
, которые как указано выше, касаются только результатов его методов, поэтому этот параметр является необязательным, и поэтому мне не нужно вводить DI в конструктор, поэтому наследующие классы не будут нуждаться в этом.
public class JobDescriptionCompanyDocument : CompanyDocumentBase
{
public override object GetAllProperties(Employee employee,
string properties, CompanyDocumentReferenceData documentReferenceData)
{
var document = JsonConvert.DeserializeObject<JobDescriptionModel>(properties);
document.IndividualEmploymentAgreementNumber = GetEmployeeIndividualEmploymentAgreementNumber(employee);
return document;
}
}
Есть ли простой способ добиться этого? Желательно без необходимости устанавливать отдельную библиотеку, такую как Unity или Autofa c. В идеале было бы так или иначе получить экземпляр CompanyDocumentsService
непосредственно в это свойство, что-то вроде:
private CompanyDocumentService CompanyDocumentService => Startup.Services.blah that instance