2017-07-17 100 views
0

我是新的存儲庫模式,並試圖在我的項目中實現。 我有實體類Admission.cs當前類型「IAdmissionRepository」是一個接口,不能構造。你是否缺少類型映射?

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

我得到的AdmissionLogic爲: 當前類型,「IAdmissionRepository,」是一個接口,並且不能建立。你是否缺少類型映射? 我在這裏做錯了什麼?

+0

我不太瞭解Unity容器,但我很確定你必須註冊抽象類型,即與實際實現類型的接口 – Luiso

回答

0

註冊部分似乎不正確。您正在註冊IAdmissionLogic,但沒有實施。那麼你永遠不會解決IAdmissionLogic組件,而是IAdmissionRepository。 您應該註冊倉庫與其實施類型。

dependencyContainer.RegisterType<IAdmissionRepository, AdmissionRepository>(); 

而且你的註冊碼應該去組成根(每一次應用程序),而不是在一個類實現業務邏輯。有關說明,請參見http://blog.ploeh.dk/2011/07/28/CompositionRoot/

+0

這工作得很好,我才知道我註冊了IAdmissionLogic,它是錯誤。我應該註冊IAdmissionRepository。然後它運行良好。此外,我有unity.config文件正在做這種映射,但它沒有爲我做,因爲我在另一個項目中有另一個同名的存儲庫,它發現,而不是新的。然後,我將具有完全限定名稱空間的unity.config文件更改爲IAdmissionRepository。這清除了所有的錯誤,並工作完美。謝謝 –

0
dependencyContainer.RegisterType(typeof(IAdmissionLogic)); 

這裏可能有兩個問題。

a)您應該註冊concrete type(即類),而不是界面。

b)你不應該在AdmissionLogic的構造函數中這樣做(否則它會運行很多次)。

您的dependencyContainer應該在啓動時創建(並分配給static變量)。應該同時設置註冊(一次,不重複)。

相關問題