Açıklamalarda yer aldığı gibi, IHttpContextAccessor
hizmetinize enjekte edebilir ve HttpContext
gereksinim duyduğunuz tek şey ise, erişim sağlayabilirsiniz. Eğer HttpContext
ait denetleyicisi veya dışarıdan yalnızca kullanılabilir bir şey gerekiyorsa
public class MyService : IMyService
{
private readonly HttpContext context;
public MyService(IHttpContextAccessor httpContextAccessor)
{
if(IHttpContextAccessor==null)
throw new ArgumentNullException(nameof(httpContextAccessor));
context = httpContextAccessor.HttpContext;
}
}
Ancak, bir fabrika oluşturmak ve fabrikaya
public class MyServiceFactory : IMyServiceFactory
{
// injecting the HttpContext for request wide service resolution
public MyServiceFactory(IHttpContextAccessor httpContextAccessor) { ... }
public IMyService Create(IDependency1 dep1, IDependency2 dep 2, string someRuntimeConfig)
{
IServiceProvider provider = this.context.RequestServices;
var myService = new MyService(provider.GetService<ISomeRepository>(), dep1, dep2, someRuntimeConfig);
return myService;
}
}
parametrelerini geçirmek ve ardından IMyServiceFactory
enjekte edebilirsiniz IMyService
'a ihtiyacınız olan sınıflar.
btw. istek başına verilen hizmetler için 'AddScope 've' AddTransient 'kullanmazsınız. 'AddTransient' her çözünürlük için yeni bir örnek oluşturacaktır, yani aynı depoyu kullanarak iki hizmet enjekte ederseniz, her iki hizmet de istekleri için paylaşılan bir değil, kendi depo örneğini alacaktır. – Tseng
Serviste tam olarak neye ihtiyacınız olduğunu belirtebilir misiniz? 'HttpContext'? Ya da farklı bir şey? 'HttpContext' kolayca enjekte edilebilir, diğer şeyler almak daha zor olabilir – Tseng
Ben 'HttpContext' yeterli olmalı ve tamamen haklıyım,' AddTransient' yerine 'AddScoped' kullanmak istedim. Şu anda AFK'm, ama 'AddScoped' için aşırı yüküm var mı? – gzak