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

The current type, "IAdmissionRepository," is an interface and cannot be constructed. Are you missing a type mapping?

我是存储库模式的新手,正在尝试在我的项目中实现它。 我有实体 class Admission.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);
    }
}

然后我在不同的项目中有业务逻辑 class:

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

然后我在与上述项目相同的项目中拥有实际存储库 class:

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);

我以以下身份进入 AdmissionLogic: 当前类型 "IAdmissionRepository," 是一个接口,无法构造。您是否缺少类型映射? 我在这里做错了什么?

dependencyContainer.RegisterType(typeof(IAdmissionLogic));

这里可能有两个问题。

a) 您应该注册 concrete type(即 class),而不是界面。

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

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

注册部分似乎不正确。您正在注册 IAdmissionLogic 但没有实施。那么你永远不会解析 IAdmissionLogic 组件,而是解析 IAdmissionRepository。 您应该改为使用其实现类型注册存储库。

dependencyContainer.RegisterType<IAdmissionRepository, AdmissionRepository>();

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