Если вы хотите использовать Autofa c в ASP. NET Core, сначала вам необходимо настроить метод CreateHostBuilder
для использования «Autofa c» в качестве контейнера Io C.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Затем вы должны добавить метод ConfigureContainer
в класс Startup
, чтобы обеспечить пользовательскую конфигурацию для конструктора контейнеров следующим образом:
public void ConfigureContainer(ContainerBuilder builder)
{
builder.Register<IParticipant>((context, parameter) =>
{
var type = parameter.TypedAs<PersonType>();
return type switch
{
PersonType.Person => new Person(),
PersonType.Doctor => new Doctor(),
_ => new Person(),// Or throw an exception
};
}).As<IParticipant>();
}
Наконец, используйте Func<PersonType, IParticipant>
вместо IParticipant
для _participantFactory
декларации и введите его следующим образом:
public class SampleController : Controller
{
private readonly Func<PersonType, IParticipant> _participantFactory;
public SampleController (Func<PersonType, IParticipant> participantFactory)
{
_participantFactory = participantFactory;
}
[HttpGet]
public IActionResult Get()
{
var participant = _participantFactory(PersonType.Person);
return Ok(participant );
}
}