2010-10-29 32 views
1

這裏是我的問題,C#4編譯器中的奇怪錯誤?別名得到的名稱空間混淆了

我使用一個命名空間來刪除​​這是從實體框架的實體對象(一POCO工廠創建域對象的工廠類歧義,如果使..感覺! )。叫我老土,但我喜歡的東西這樣:-)

我用的別名是這樣工作的命名空間 -

using Entities = DataAccess.Models.AccessControl; 
using Cases = DomainModel.BusinessObjects.Implimentations.Cases; 

現在,DomainModel.BusinessObjects.Implimentations.Cases命名空間只有一個類型稱爲迄今爲止CaseType。然而,當我正在研究另一種消耗CaseType類的類型時,我注意到當我在Cases別名中「點」時,它指向DataAccess程序集中完全不同的名稱空間,並在智能感知中爲我提供CaseTypeFactory

alt text

所以我檢查了CaseTypeCaseTypeFactory類和它們正確的命名空間。神的名字是怎麼回事?我真的無法解決這個問題。

下面是CaseTypeCaseTypeFactory的代碼(如果有幫助的話)。

CaseTypeFactory

using Domain = DomainModel.BusinessObjects.Implimentations.Cases; 
using Entities = DataAccess.Models.AccessControl; 
using Interfaces.DataAccess; 

    namespace DataAccess.Factories.Cases 
    { 
     public class CaseTypeFactory : 
      IEntityPOCOFactory<Domain.CaseType, Entities.CaseType> 
     { 
      #region IEntityPOCOFactory<CaseType,CaseType> Members 

      public Domain.CaseType CreatePOCO(Entities.CaseType entity) 
      { 
       return new Domain.CaseType(entity.Id, entity.Name, entity.LastChanged); 
      } 

      public IList<Domain.CaseType> CreatePOCOs(
       IEnumerable<Entities.CaseType> entities) 
      { 
       var toReturn = new List<Domain.CaseType>(); 

       foreach (var entity in entities) 
       { 
        toReturn.Add(CreatePOCO(entity)); 
       } 
       return toReturn; 
      } 

      #endregion 
     } 
    } 

CaseType

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using DomainModel.BusinessObjects.Base; 

namespace DomainModel.BusinessObjects.Implimentations.Cases 
{ 
    public class CaseType : NamedNumberedAndVersioned 
    { 
     public CaseType(string name, DateTime lastChanged) 
      : this(0, name, lastChanged) { } 

     public CaseType(int id, string name, DateTime lastChanged) 
      : base(id, name, lastChanged) { } 

     public void Update(string name) 
     { 
      this.Name = name; 
     } 
    } 
} 

這也許值得一提的我與.NET的4.0/VS2010

任何幫助將大規模讚賞。 在此先感謝。

回答

1

是您在DataAccess.Factories命名空間中編寫的代碼嗎?如果是這樣,那麼Cases的確將首先解析爲DataAccess.Factories.Cases

兩個選項:

  • 使用別名這也是另一個命名空間的名稱,例如而不是.

    using DomainCases = ... 
    
  • 使用::,迫使它使用別名:

    IEntityPOCOFactory<Cases::CaseType, Whatever> 
    

我會親自去的第一個選項,以使事情更清晰......或者嘗試避免要求以名稱空間別名開始。

+0

非常奇怪。你一如既往的正確處理這筆錢。爲什麼當我限定了別名應該使用的名稱空間時,它必須根本解決這個問題?奇特但非常感謝喬恩。 – Stimul8d 2010-10-29 09:49:49

+0

@ Stimul8d:那麼,因爲你可以*也*使用帶有非別名的點符號(而只有*將*使用別名)。當有疑問時,儘量給一個名字只有一個意思:) – 2010-10-29 09:55:37

+0

同意,謝謝你的建議。 – Stimul8d 2010-10-29 10:13:46