Я понимаю, как вставить обнуляемый параметр в конструктор, используя TypedParameter в autofa c документах . Я изо всех сил пытаюсь понять, как затем внедрить этот сервис в другой сервис, откуда придет параметр. Вот пример кода:
// interface
pubic Interface IProvider
{
string GetParameter();
}
// implementation
public class Provider : IProvider
{
private readonly int? _parameterId;
public Provider(int? parameterId){
_parameterId = parameterId;
}
public string GetParameter(){
// go get my parameter from wherever using int that was passed to constructor
}
}
Теперь в моем контроллере API я могу добавить этот сервис, чтобы получить параметр:
public class ParameterController : ApiController
{
private readonly IProvider _provider;
public ParameterController(IProvider provider){
_provider = provider;
}
[HttpGet]
public string GetParameterNoInput(){
_provider.GetParameter(null);
}
[HttpGet]
public string GetParameter(int input){
// my provider wants this input but not as a passed parameter
// I don't know how to do this
}
}
И, конечно, регистрация
builder.RegisterType<Provider>().As<IProvider>().InstancePerRequest()
.WithParameter(new TypedParameter(typeof(Guid?), "parameterId"));
FWIW, я знаю, что это не лучший выбор дизайна, но это то, что мне диктуют. Какова схема решения этой проблемы в autofa c? Для пояснения, часть, которая диктуется, заключается в том, что IProvider имеет вставляемый в него обнуляемый параметр параметра INTII вместо того, чтобы предоставлять методы, которые принимают значение типа int
Должен ли я делать что-то подобное в моем контроллере:
Func<int?>, IProvider _newProvider;
public ParameterController(Func<int?, IProvider> provider){
_newProvider = provider;
}
// and then in my api i can do
[HttpGet]
public string GetParameter(int input){
var provider = _newProvider(input);
provider.GetParameter();
}