所以我認爲我會很光滑,試試這個。我需要傳遞一個上下文,而不是每次都新建一個上下文,並且能夠定義映射(實體框架) - 爲了做到這一點,我需要繼承,然後重寫DbContext類。我想保持它可以與任何背景我可以插入,所以這就是讓我這樣做。我有一個IRepository接口,在它需要一個(實體)與通常的嫌疑人,以及它與IContextFactory的依賴實現...StructureMap 2.6.1,一個紅外線庫<T>和一個EFRepository <T,TContext>
public interface IContextFactory<T> where T : DbContext
{
T Context { get; }
}
而且對我的「EFRepository」
public class EFRepository<T, TContext> : IRepository<T> where T : class
where TContext : DbContext
{
public EFRepository(IContextFactory<TContext> contextFactory)
{
}
}
在我的地圖中,我做了這些工作之一...
x.For(typeof(IContextFactory<>)).Use(typeof(ContextFactory<>));
x.For(typeof(IRepository<>)).Use(typeof(EFRepository<,>));
好酷。在我的單元測試中,我嘗試用這種方法...
var repository = ObjectFactory.GetInstance<EFRepository<Currency, EFContext>>();
var repository2 = ObjectFactory.GetInstance<IRepository<Currency>>();
第一個工作,沒問題。第二個,我碰到
提供的通用參數的數量不等於泛型類型定義的參數。 參數名稱:實例化
我猜這是因爲我沒有告訴結構映射哪些泛型傳遞給IRepository,因爲我傳遞2?我怎麼做? ...我可以這樣做嗎?
所以真正的答案是「這很糟糕」......我對此感到失望!我現在將這個問題留出來,但這可能是正確的答案。你說得對,它確實很糟糕。 :-( – jeriley 2011-05-10 12:20:10