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