Dostaję dwie różne instancje mimo, że mam zarejestrowane jako per-scope-lifetime. Nie rozumiem dlaczego albo jestem ślepy. Lazy<T>
chyba nie wpływa na to czy zostanie zresolvovany ze scope czy nie? AuthenticationMiddleware
jest jako Lazy, ale nadal scope istnieje gdy jest wykonywany, bo jest w ciele scope'a..
Zarejestrowane mam:
builder.Register<OrderIntegrationContext>(c => GetDbContext(c)).InstancePerLifetimeScope();
builder.RegisterType<OrderIntegrationRepository>().As<IOrderIntegrationRepository>().InstancePerLifetimeScope();
Repo:
public class OrderIntegrationRepository : IOrderIntegrationRepository
{
public readonly OrderIntegrationContext _context;
public OrderIntegrationRepository(OrderIntegrationContext context)
{
_context = context;
}
Inicjalizacja scope'a i pierwsze użycie następuje tutaj:
using (var scope = Container.BeginLifetimeScope(builder =>
{
Container.Resolve<ISpecificTestDataInitializer>()
.EnsureConfiguration()
.EnsureOrderForQueryingForValidCustomer(out var order);
// ................................................
// w srodku ISpecificTestDataInitializer
internal class SpecificTestDataInitializer : ISpecificTestDataInitializer
{
private readonly OrderIntegrationContext context;
public SpecificTestDataInitializer(OrderIntegrationContext orderIntegrationContext)
{
this.context = orderIntegrationContext;
}
// ... tu sie cos inicjalizuje na this.context
No i teraz w drugim miejscu:
public class AuthenticationMiddleware : Middleware<CustomerOrderConfig<IContract>>
{
private readonly IOrderIntegrationRepository _repository;
public AuthenticationMiddleware(IOrderIntegrationRepository repository)
{
_repository = repository;
// ...
await _repository.GetSingleOrDefaultAsync(... // no i sie wywala bo nie ma nic zainicjalizowanego w kontekście, bo robi zapytanie na innej instancji kontekstu niz inicjalizacja byla zrobiona
Wszystko jest w tym samym scope, więc nie czaję.