Производительность Autofac SingleInstance WebApi

Мы улучшили производительность нашего API, добавляя сервисы без состояния в .SingleInstance() , но у меня есть вопрос относительно приложенного демонстрационного кода,

  • IBusAppService, который мы используем в контроллере, имеет значение SingleInstance(), но внутри BusAppService мы используем больше интерфейсов, например ( IBusRepository или IBusDomainService )
  • Итак, вопрос в том, чтобы повысить производительность, должны ли мы установить все интерфейсы в SingleInstance() внутри IBusAppService или производительность одинакова, потому что они находятся внутри SingleInstance??

Я прикреплю сюда код с рабочим процессом:

Контроллер API:

    public class BusApiController : ApiController
    {
        private readonly IBusAppService _iBusAppService;
        private readonly IBusMapper _iBusMapper;
        public BusApiController(IBusAppService iBusAppService,
                                IBusMapper iBusMapper)
        {
            _iBusAppService = iBusAppService;
            _iBusMapper = iBusMapper;
        }

        [HttpGet]
        public BusResponse Get(long id)
        {
            var bus = _iBusAppService.Get(id);

            var busResponse = _iBusMapper.Convert(bus);
            return busResponse;
        }
    }


    public class BusResponse {
       public long Id { get; set; }
    }

    public interface IBusMapper
    {
        BusResponse Convert(Bus bus);
    }

    public class BusMapper : IBusMapper
    {
        public BusResponse Convert(Bus bus)
        {
            if (bus == null) return null;

            var result = new BusResponse{Id = bus.Id};
            return result;
        }
    }

    builder.RegisterType<BusAppService>().As<IBusAppService>().SingleInstance();
    builder.RegisterType<BusMapper>().As<IBusMapper>().SingleInstance(); 

Служба приложений

public interface IBusAppService
{
    Bus Get(long id);
}

public class BusAppService : IBusAppService
{
    private readonly IBusRepository _iBusRepository;
    private readonly IBusDomainService _iBusDomainService;
    public BusAppService(IBusRepository iBusRepository, IBusDomainService iBusDomainService )
    {
        _iBusRepository = iBusRepository;
        _iBusDomainService = iBusDomainService;
    }
    public Bus Get(long id)
    {
        var bus = this._iBusRepository.Get(id);
        var busTax = this._iBusDomainService.CalculateTax(bus);

        var result = bus;
        return result;
    }
}

person user1520494    schedule 08.12.2017    source источник


Ответы (1)


Все, что потребляется службой одного экземпляра, в конечном итоге будет единственным экземпляром из-за captive зависимости. Вы также можете изменить их на один экземпляр, но это не обязательно изменит производительность, связанную со стоимостью создания экземпляра, которую вы видите сейчас.

person Travis Illig    schedule 09.12.2017