当前类型"IAdmissionRepository,"是接口,无法构造。是否缺少类型映射?



我是存储库模式的新手,并尝试在我的项目中实现它。 我有实体类准入.cs

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)
{
}
}
}

当我在我正在查询的实际 aspx 页面中编写以下行时;

AdmissionLogic admissionLogic = new AdmissionLogic();
Admission admission = admissionLogic.GetAdmission(AdmissionId);

我进入招生逻辑为: 当前类型"IAdmissionRepository"是一个接口,无法构造。是否缺少类型映射? 我在这里做错了什么?

注册部分似乎不正确。您正在注册IAdmissionLogic但没有实现。然后,您永远不会解析IAdmissionLogic组件,而是解析IAdmissionRepository。 相反,您应该使用其实现类型注册存储库。

dependencyContainer.RegisterType<IAdmissionRepository, AdmissionRepository>();

此外,您的注册码应转到组合根目录(每个应用程序一次(,而不是在实现业务逻辑的类中。有关说明,请参阅 http://blog.ploeh.dk/2011/07/28/CompositionRoot/。

dependencyContainer.RegisterType(typeof(IAdmissionLogic));

这里可能有两个问题。

a( 您应该注册具体类型(即.class(,而不是接口。

b( 你不应该在AdmissionLogic的构造函数中这样做(否则它会运行很多次(。

您的dependencyContainer应该在启动时创建一次(并分配给static变量(。注册应同时设置(一次,而不是重复(。

最新更新