我的C#MVC網站使用StructureMap進行依賴注入。
我的DbContext的構造函數過去如下。
public class PortalEntityModel : DbContext
{
public PortalEntityModel() : base("name=PortalEntityModel")
{
}
}
現在我已經添加了Effort.EF6以進行單元測試,我不得不將我的DbContext構造函數更改為此。
public class PortalEntityModel : DbContext
{
public PortalEntityModel(DbConnection connection) : base(connection, true)
{
}
}
雖然我現在可以對我的代碼進行單元測試我不能再運行網站了,因為自改變後StructureMap無法創建。
沒有註冊默認實例,無法自動確定類型'System.Data.Common.DbConnection'
我怎樣才能告訴StructureMap如何像以前一樣初始化我的DBContext,同時允許Effort.EF6也能工作?
編輯 -
StructureMap是在網站啟動時啟動的,如下所示......
public static void Start()
{
IContainer container = IoC.Initialize();
StructureMapDependencyScope = new StructureMapDependencyScope(container);
DependencyResolver.SetResolver(StructureMapDependencyScope);
DynamicModuleUtility.RegisterModule(typeof(StructureMapScopeModule));
}
它在網站啟動時自動啟動
[assembly: PreApplicationStartMethod(typeof(StructuremapMvc), "Start")]
[assembly: ApplicationShutdownMethod(typeof(StructuremapMvc), "End")]
我設法搞清楚了。更改DBContext結構圖的構造函數時無法將其傳遞給DbConnection。
所以我現在有兩個構造函數,並在結構圖設置中添加了一些邏輯,告訴它網站應該使用哪個構造函數。
c .For()。Use()。SelectConstructor(()=> new PortalEntityModel());