Странная ошибка в компиляторе C # 4?Пространства имен псевдонимов перепутаны - PullRequest
1 голос
/ 29 октября 2010

Вот моя проблема,

Я использую пространство имен для удаления неоднозначности из класса фабрики, который создает объекты домена из объектов сущности каркаса сущности (фабрика POCO, ... если это имеет смысл!).Назовите меня старомодным, но мне нравятся такие вещи: -)

Пространства имен, с которыми я работаю, имеют псевдонимы как таковые -

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

Теперь у пространства имен DomainModel.BusinessObjects.Implimentations.Cases есть только одноТип пока называется CaseType.Однако, пока я работал над другим типом, который использует класс CaseType, я заметил, что когда я 'ставлю' точку в псевдониме Cases, он указывает на совершенно другое пространство имен в моей сборке DataAccess и дает мне CaseTypeFactoryв интеллигенции.

alt text

Итак, я проверил классы CaseType и CaseTypeFactory, и они правильно расположены в пространстве имен.Что, во имя Бога, происходит?Я действительно не могу разобраться с этим.

Вот код для CaseType и CaseTypeFactory, если это поможет.

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 Ответ

1 голос
/ 29 октября 2010

Код, который вы пишете, находится в пространстве имен DataAccess.Factories?Если это так, то Cases действительно сначала разрешится на DataAccess.Factories.Cases.

Два варианта:

  • Использовать псевдоним, который не также имя другого пространства имен, например

    using DomainCases = ...
    
  • Используйте :: вместо ., чтобы заставить его использовать псевдоним:

    IEntityPOCOFactory<Cases::CaseType, Whatever>
    

Я бы лично выбрал первый вариант, чтобы прояснить ситуацию ... или попытаться не начинать с псевдонимов пространства имен.

...