Skąd powinna się wziąć ta instancja?
Autofac powinien ją wstrzyknąć.
Potem powinienem gdzieś zrobić Resolve<IDatabaseService>, ale nie do końca rozumiem gdzie i po co.
Po co?
Żeby dostać z kontenera konkretną implementację IDatabaseService.
Gdzie?
W ogólnym przypadku to w jakimś punkcie głównym aplikacji, w przypadku MVC np. właśnie w kontrolerze. Wtedy robisz po prostu jakieś IDatabaseService dbService = container.Resolve<IDatabaseService>(). Wszystkie dalsze zależności, które są potrzebne do działania konkretnej implementacji IDatabaseService Autofac sam wykryje i wstrzyknie, tzn. jak twój konkretny typ implementujący IDatabaseService potrzebuje do działania jakieś repo, czy tam loggera i ma to otrzymać w konstruktorze to tym się nie martwisz, bo Autofac sam to wykryje i wstrzyknie, o ile wcześniej zarejestrujesz te niezbędne elementy w kontenerze.
Ale w przypadku MVC lepiej użyj Autofac MVC Integration(albo jakoś tak), wtedy po prostu przy rejestracji robisz coś takiego - container.RegisterControllers(Assembly.GetExecutingAssembly()) i ręcznie nie musisz używać Resolve<T>().
No i musisz jeszcze ustawić, żeby aplikacja korzystała z Autofacowego resolvera. Ale to wszystko znajdziesz w dokumentacji.
Instancja kontenera powinna gdzieś sobie "żyć" przez cały czas działania aplikacji?
Kontener to chyba istnieje przez cały czas życia aplikacji. Ważniejsze, żeby poszczególne typy z niego wyciągane korzystały z prawidłowego lifetime.