我有两个这样的课程:
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 而不是 2 个或更多,但由于输入和输出类型的差异,我无法做到。在这一点上,我相信我目前的方法对我来说似乎很好。
我在运行时得到的错误是:
依赖项解析失败,type = "Contracts.DataManagers.ILanguageManager",name = ""。异常消息为:当前构建操作(构建密钥 Build Key[Contracts.DataManagers.ILanguageManager, null])失败:当前类型 Contracts.DataManagers.ILanguageManager 是接口,无法构建。您是否缺少类型映射?(策略类型 BuildPlanStrategy,索引 3)
看起来,在配置文件中,当归结为有 2 个实现相同接口的不同类时,声明必须不同。
如果你能指出我正确的方向,我会很高兴。
提前致谢,