C# “当前类型”;IAdmissionRepository,“IAdmissionRepository”;是一个接口,无法构造。是否缺少类型映射?
我不熟悉存储库模式,并尝试在我的项目中实现它。 我正在上实体班C# “当前类型”;IAdmissionRepository,“IAdmissionRepository”;是一个接口,无法构造。是否缺少类型映射?,c#,interface,repository-pattern,C#,Interface,Repository Pattern,我不熟悉存储库模式,并尝试在我的项目中实现它。 我正在上实体班 public class Admission { public long AccountID { get; set; } public long ClientID { get; set; } public long AdmissionID { get; set; } } 然后我有这样的界面: namespace Common.Interfaces { public interface IAdm
public class Admission
{
public long AccountID { get; set; }
public long ClientID { get; set; }
public long AdmissionID { get; set; }
}
然后我有这样的界面:
namespace Common.Interfaces
{
public interface IAdmissionLogic:IDisposable
{
Admission GetAdmission(long admissionId);
void UpdateAdmission(Admission admission);
}
}
然后,我在不同的项目中使用业务逻辑类,如下所示:
public class AdmissionLogic:IAdmissionLogic
{
private IAdmissionRepository data;
public AdmissionLogic()
{
var dependencyContainer = new UnityContainer().LoadConfiguration();
dependencyContainer.RegisterType(typeof(IAdmissionLogic));
data = dependencyContainer.Resolve<IAdmissionRepository>();
}
public void Dispose()
{
data.Dispose();
}
}
namespace Data.Interfaces
{
public interface IAdmissionRepository:IDisposable
{
CommonEntities.Admission GetAdmission(long admissionId);
void UpdateAdmission(CommonEntities.Admission admission);
}
}
然后,我在同一个项目中拥有实际的存储库类,如上所述:
namespace Data.Repositories
{
public class AdmissionRepository : EntitiesRepositoryBase<Data.Admission, CommonEntities.Admission>, IAdmissionRepository
{
public CommonEntities.Admission GetAdmission(long admissionId)
{
}
}
}
我的录取逻辑如下:
当前类型“IAdmissionRepository”是一个接口,无法构造。是否缺少类型映射?
我做错了什么
dependencyContainer.RegisterType(typeof(IAdmissionLogic));
这里可能有两个问题
a) 您应该注册的是(即类),而不是接口
b) 您不应该在AdmissionLogic
的构造函数中执行此操作(否则它将运行多次)
您的
dependencyContainer
应该在启动时创建一次(并分配给静态
变量)。应同时设置注册(一次,而不是重复)。注册部分似乎不正确。您正在注册IAdmissionLogic
,但没有实现。然后您永远不会解析IAdmissionLogic
组件,而是解析IAdmissionRepository
。
您应该改为使用其实现类型注册存储库
dependencyContainer.RegisterType<IAdmissionRepository, AdmissionRepository>();
dependencyContainer.RegisterType();
此外,您的注册代码应该转到组合根目录(每个应用程序一次),而不是在实现业务逻辑的类中。请参阅以获取解释。我对Unity容器不太了解,但我非常确定您必须注册抽象类型,即与实际实现类型的接口。这很好,我知道我注册的IAdmissionLogic是错误的。我应该注册IAdmissionRepository。然后它工作得很好。另外,我有一个unity.config文件正在进行映射,但它并没有为我这样做,因为我在另一个项目中有另一个同名的存储库,它正在发现它,而不是新的存储库。然后,我将具有完全限定命名空间的unity.config文件更改为IAdmissionRepository。这清除了所有的错误,工作得非常完美。谢谢
dependencyContainer.RegisterType<IAdmissionRepository, AdmissionRepository>();