cevap bulamadık.
(ConfigureServices()
yöntemde) Bağımlılık enjeksiyon sisteminde ApplicationDbContext
kayıt için .AddDbContext<ApplicationDbContext>();
yöntem kullanarak, Scoped bağımlılığı (ya da "isteğe göre" bir deyişle) olarak kayıtlı gerçeğine yol açar. Böylece sadece Bağımlı Enjeksiyon sisteminden almanız gerekir.
yapıcı yöntemi sınıfının parametresinde (hangi DBContext kullanacağız) olarak DBContext ekleyin. Öyleyse Dependency Injection sistemini kullanarak bu sınıfı almalısınız, örneğin kontrolörün yapıcısı parametresi olarak eklediniz. Eğer bağlam almak için yapıcı enjeksiyon kullanmak istemiyorsanız
public class HabitsController : Controller
{
public HabitsController(HabitService habitService)
{
}
}
public class HabitService
{
private GetHabitsContext _dbContext;
public HabitService(GetHabitsContext dbContext)
{
_dbContext = dbContext;
}
}
Ama GetService()
yöntemi kullanarak gerekli dependenses alabilirsiniz (ama bunu almak, aşağıdaki örnekte, bunun için ServiceProvider durumda I'am ihtiyaç kurucu enjeksiyon yoluyla da).
using Microsoft.Framework.DependencyInjection; // for beta 6 and below
using Microsoft.Extensions.DependencyInjection; // for beta 7 and above
public class HabitService
{
private IServiceProvider _serviceProvider;
public HabitService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public GetHabit()
{
var dbcontext = _serviceProvider.GetService<ApplicationDbContext>();
}
}
ilk yöntemde, biz (değil yapıcı enjeksiyon yoluyla) çok HabitService
yöntem GetService()
yoluyla alabilirsiniz. sözler için
using Microsoft.Framework.DependencyInjection; // for beta 6 and below
using Microsoft.Extensions.DependencyInjection; // for beta 7 and above
public class HabitsController : Controller
{
public HabitsController(IServiceProvider serviceProvider)
{
var habitService= serviceProvider.GetService<HabitService>();
}
}
public class HabitService
{
private GetHabitsContext _dbContext;
public HabitService(GetHabitsContext dbContext)
{
_dbContext = dbContext;
}
}
Teşekkür Tseng:
Ben senin nesneler içine kabı enjekte etmek oldukça kötü bir uygulama olduğunu, unutulmamalıdır. kap, sadece (alan/iş katmanı uygulama düzeyinde uygulanır, ve) bileşimin kök ve fabrikalar belirli tip referans alınmalıdır
HabitService içinde HabitsController ve _dbContext içinde
DBContext farklı bağlamlar!
ben kontrol
, bu aynı bağlamdır.
Eğer Kontrolörleri bu 'bazı methods' çağırmak mısın? İstek başına içerik alabilir ve bunu bazı yöntemlere iletebilirsiniz. – Michael
rahat değil, birden fazla çağrı olabilir. MVC5 uygulamalarında PerRequestLifetimeManager ile UnityDependencyResolver kullandım. Istek başına DBContext oluşturmak orada tek isteği içinden, denetleyicinizdeki enjekte istediğiniz kadar çoklu 'bazı methods' onu geçebilir - Ben tam olarak neye ihtiyacınız O yapacak benzer bir şey burada –
yapmaya çalışıyorum. Daha fazla ayrıntı için [bu blog yazısı] (http://www.jerriepelser.com/blog/resolve-dbcontext-as-interface-in-aspnet5-ioc-container) kontrol edin. – Michael