2013-06-28 25 views
0

您好我有創建使用generics.Here是我的代碼類:編譯器並沒有看到我的具體類型

public class RegisterMappings : IRegisterMappings 
    { 
     public virtual void CreateMap<TFrom, TTo>() 
     { 
      Mapper.CreateMap<TFrom, TTo>(); 
     } 

     public void PostRegisterMappings() 
     { 
      Mapper.AssertConfigurationIsValid(); 
     } 

     public void CreateGetUpcommingLessons<GetUpcomingLessons_Result , UpcomingLessonDTO>() 
     { 
      Mapper.CreateMap<GetUpcomingLessons_Result, UpcomingLessonDTO>().ForMember(dest => dest.TeacherOfficialName, opt => opt.Ignore()); 
     } 
} 

看來,在我的情況下,編譯器不看到GetUpcomingLessons_Result和UpcommingLessonsDTO的具體類型。

我已經爲他們添加了使用語句,但是resharper告訴我他們可以被刪除,因爲他們不是用戶。

如何讓編譯器看到GetUpcomingLessons_Result和UpcommingLessonsDTO是具體類型?

編輯

這裏是我的情況下,我想創建一個圍繞Autommapper的映射功能wapper。 而前兩種方法是什麼。

我的問題是,我在我的目標有一個更property.This的情況下,是我源:

public partial class GetUpcomingLessons_Result 
{ 
    public string CourseName { get; set; } 
    public string ModuleName { get; set; } 
    public Nullable<int> ModuleInstanceId { get; set; } 
    public int StudentAssignmentId { get; set; } 
    public int StudentAssignmentInstanceId { get; set; } 
    public Nullable<System.DateTime> EventDate { get; set; } 
    public Nullable<System.DateTime> StartTime { get; set; } 
    public Nullable<System.DateTime> EndTime { get; set; } 
    public string TeacherLastName { get; set; } 
    public string TeacherMiddleName { get; set; } 
    public string TeacherGender { get; set; } 
    public Nullable<int> LessonNumber { get; set; } 
    public string LocationName { get; set; } 
} 

這是我的目標:

public class UpcomingLessonDTO 
{ 
    public string CourseName { get; set; } 
    public string ModuleName { get; set; } 
    public int? ModuleInstanceId { get; set; } 
    public int StudentAssignmentId { get; set; } 
    public int StudentAssignmentInstanceId { get; set; } 
    public DateTime? EventDate { get; set; } 
    public DateTime? StartTime { get; set; } 
    public DateTime? EndTime { get; set; } 
    public string TeacherLastName { get; set; } 
    public string TeacherMiddleName { get; set; } 
    public string TeacherGender { get; set; } 
    public int? LessonNumber { get; set; } 
    public string LocationName { get; set; } 

    // calculated fields 
    public string TeacherOfficialName { get; set; } 
} 

,我需要告訴該映射器忽略TeacherOfficialName名稱。直到現在,這很容易,我會寫這樣的:

Mapper.CreateMap<GetUpcomingLessons_Result, UpcomingLessonDTO>().ForMember(dest => dest.TeacherOfficialName, opt => opt.Ignore()); 

但創建包裝後,我需要爲這種情況創建另一種方法,這就是爲什麼我需要具體類型的GetUpcomingLessons_Result和UpcomingLessonDTO。

+1

具體類型? *你認爲這意味着什麼? –

+0

我創建的類 – aleczandru

+0

請顯示所有代碼 – Serghei

回答

1

你應該從CreateGetUpcommingLessons簽名刪除泛型類型:

public void CreateGetUpcommingLessons() 
{ 
    Mapper.CreateMap<GetUpcomingLessons_Result, UpcomingLessonDTO>().ForMember(dest => dest.TeacherOfficialName, opt => opt.Ignore()); 
} 

你現在有使用GetUpcomingLessons_ResultUpcomingLessonDTO爲泛型類型(它將使用由用戶進行輸入的類型)編譯器的方式而不是實際的類型。爲了使其更清楚,您目前的實施方案與此相同:

public void CreateGetUpcommingLessons<TValueA, TValueB>() 
{ 
    Mapper.CreateMap<TValueA, TValueB>().ForMember(dest => dest.TeacherOfficialName, opt => opt.Ignore()); 
} 
+0

這不能完成我仍然需要保留我的配置文件中的映射 – aleczandru

+0

我需要能夠在我的配置文件中調用類似以下內容:m_RegisterMappingsapper.CreateGetUpcommingLessons ()然後能夠在我的RegisterMappings類中調用Mapper.CreateMap ()。ForMember(dest => dest.TeacherOfficialName,opt => opt.Ignore()); – aleczandru

+0

嗯......你是對的,但如果我添加dest.TeacherOfficialName我得到一個buil d錯誤......我需要以某種方式能夠將其轉換爲正確的類型 – aleczandru

相關問題