Znalazłem na stronie autofaca taki przykład, ale tam wszystko jest w funkcji main:
namespace DemoApp
{
public class Program
{
private static IContainer Container { get; set; }
static void Main(string[] args)
{
// ...the stuff you saw earlier...
}
public static void WriteDate()
{
// Create the scope, resolve your IDateWriter,
// use it, then dispose of the scope.
using (var scope = Container.BeginLifetimeScope())
{
var writer = scope.Resolve<IDateWriter>();
writer.WriteDate();
}
}
}
}
Tworzy się coś nazywane "lifetime scope" i z tego wyciąga konkretne instancje- a to wciąż wymaga, by jakoś się odwołać do kontenera. Nie mogę zrozumieć, gdzie ten kontener "żyje" i w jaki sposób on się komunikuje z moją aplikacją.
U siebie mam w Global.asax coś takiego:
ContainerBuilder cb = new ContainerBuilder();
cb.RegisterType<DorabiamyPlDataContext>().AsSelf();
cb.RegisterType<EntityFrameworkDatabaseService>().As<IDatabaseService>();
cb.RegisterControllers(Assembly.GetExecutingAssembly());
IContainer container = cb.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
container.BeginLifetimeScope();
Natomiast to nie działa ;) Na mój rozum, powinienem w kontrolerze na przykład mieć pole z kontenerem, i konkretne serwisy zainicjalizować za pomocą Iservice service = container.Resolve<IService>();
Ale skoro tego kontenera tam ma nie być, to nie wiem, nie dociera to do mnie.