我正在做一些MVC 6的原型設計,並陷入了一個窘境。我們的項目架構是足夠簡單:有沒有辦法讓ASP.NET 5依賴注入解決沒有參考的DbContext?
數據層(實體框架6)
服務層(類庫,引用數據層)
表示層(MVC 4,引用服務層,不引用數據層)
即使在閱讀(並同意)Composition Root pattern後,我仍試圖儘可能保持設計類似於原始設計。這意味着我的新MVC 6應用程序不知道我的DbContext
類型。你可以猜測,當我試圖注入我的服務類之一到控制器中會發生什麼:
Unable to resolve service for type My.Data.Tier.DbContext while attempting to activate My.Service.Tier.SomeService.
我相信,我們以前的實現(我沒有寫它)在反射組件解決了DbContext
bin文件夾。有沒有辦法通過內置於ASP.NET 5/MVC 6的新名稱空間Microsoft.Extensions.DependencyInjection
來完成此操作(或其他類似操作),這樣可以避免從我的表示層中強制引用我的數據層?
更新
讀喬·奧德特的回答後,我來到了我添加到我的服務層一個非常簡單的擴展方法:
public static class ServiceCollectionExtensions
{
public static void RegisterDbContext(this IServiceCollection services)
{
services.AddScoped<My.Data.Tier.DbContext, My.Data.Tier.DbContext>();
}
}
然後,在我的MVC應用程序的Startup.cs:
using My.Service.Tier.ExtensionNamespace;
public void ConfigureServices(IServiceCollection services)
{
services.RegisterDbContext();
}
就是這樣做的! – davidfowl