我有2個班是這樣的:在.net c#中使用Unity如何將MapTo多重?
1)
public class EFInitializerLanguage : EFInitializerBase, IRepositoryInitializer<Language>
{
public IEntityRepository<Language> Create()
{
return this.Model.CreateObjectContext<LanguageData>(new SqlConnection(Utility.ConnectionStrings.ConnDefault));
}
}
2)
public class EFInitializerPerson : EFInitializerBase, IRepositoryInitializer<Person>
{
public IEntityRepository<Person> Create()
{
return this.Model.CreateObjectContext<PersonData>(new SqlConnection(Utility.ConnectionStrings.ConnDefault));
}
}
而且在Unity.config的定義是(可能這是錯誤的,我想不出出去做什麼)
<unity>
<typeAliases>
<typeAlias alias="IRepositoryInitializer`1" type="Contracts.Repositories.IRepositoryInitializer`1, Contracts" />
<typeAlias alias="EFInitializerPerson" type="Data.Initializers.EFInitializerPerson, Data" />
<typeAlias alias="IRepositoryInitializerLanguage`1" type="Contracts.Repositories.IRepositoryInitializer`1, Contracts" />
<typeAlias alias="EFInitializerLanguage" type="Data.Initializers.EFInitializerLanguage, Data" />
<containers>
<container>
<types>
<type type="IRepositoryInitializer`1" mapTo="EFInitializerPerson" />
<type type="IRepositoryInitializerLanguage`1" mapTo="EFInitializerLanguage" />
</types>
</container>
</containers>
</unity>
你可能會認爲使用1 EFInitializer instea d爲2或更多,但由於輸入和輸出類型的差異,我無法做到。在這一點上,我相信我目前的做法對我來說似乎很好。
在運行時我得到的錯誤是:
依賴解析失敗,類型= 「Contracts.DataManagers.ILanguageManager」,名字= 「」。異常 消息是:當前生成操作(生成密鑰生成 鍵[Contracts.DataManagers.ILanguageManager,null])失敗: 當前類型,Contracts.DataManagers.ILanguageManager,是一個 接口,無法構建。你是否缺少類型映射? (戰略型BuildPlanStrategy,指數3)
看起來,在配置文件中,當它歸結爲有一個實現相同的接口2個不同類別的聲明必須是不同的。
如果你能指出我正確的方向,我會非常高興。
由於提前,
異常是關於'Noxon.Contracts.DataManagers.ILanguageManager'?什麼是'ILanguageManager'?我沒有看到它在你的配置中註冊... – nemesv
是的!你是對的!我猜我衝過去並加入了它。不幸的是,我現在有這個例外 無法投入「Data.Initializers.EFInitializerLanguage」類型的對象來鍵入'Contracts.Repositories.IRepositoryInitializer'1 [Contracts.Entities.Person]'。 –
你需要使用配置嗎?你能切換到代碼嗎? –