0

저는 이것이 간단한 질문 일 수 있지만 아키텍처에 익숙하지 않은 것으로 알고 있습니다. 그러니 이해해 주셔서 감사합니다.Entity Framework 6 + Code First + Castle Windsor를 사용하여 새 레코드를 삽입 할 수 없습니다.

저는 Castle Windsor를 처음 사용하고 작업 단위와 저장소 패턴을 함께 사용하지 않습니다. 그리고 내가 지금 가지고있는 문제를 해결할 필요가 있는지조차 알지 못합니다.

것은 내가 달성하기 위해 노력하고있어 :

난 그냥 몇 가지 속성과 그것을 구현하는 구체적인 POCO 클래스 도메인와 IDomain라는 인터페이스를 가지고있다.

IDomain 인터페이스 :

public interface IDomain : IPersistentObject 
{ 
    int DomainId { get; set; } 

    string Name { get; set; } 

    [LocalizedString] 
    string ItemName { get; set; } 

    [LocalizedString] 
    string ItemDescription { get; set; } 

    int ItemValue { get; set; } 
} 

도메인 POCO 클래스 :

public class Domain : AbstractDefault, IDomain, ILocalizedEntity 
{ 
    public virtual int DomainId { get; set; } 

    public virtual string Name { get; set; } 

    [LocalizedString] 
    public virtual string ItemName { get; set; } 

    [LocalizedString] 
    public virtual string ItemDescription { get; set; } 

    public virtual int ItemValue { get; set; } 
} 

DomainService.cs 클래스는 수행합니다

public void Insert(IDomain param) 
    { 
     using (var db = new DefaultContext()) 
     { 
      new DomainValidation(new DbMetaData().GetMetaData, Settings.Default.CultureName).Validate(param); 

      db.Domains.Add((Domain)param); 
     } 
    } 

또 다른 중요한 정보는 AOC를 사용하고 있다는 것입니다. 즉, 도메인 클래스에 대한 메소드 호출을 가로 채고 있습니다. 내가 뭐하는 거지 내 단위 테스트에서

public class Installers : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container.Register(Component 
      .For<IInterceptor>() 
      .ImplementedBy<Class1>() 
      .Named("DomainInterceptor")) 

      .Register(Component 
      .For<IDomain>() 
      .ImplementedBy<Domain>() 
      .LifestyleTransient() 
      .Interceptors(InterceptorReference.ForKey("DomainInterceptor")).Anywhere); 
    } 
} 

: 내 윈저 컨테이너 설치를 참조하십시오

var domain = container.Resolve<IDomain>(); // Returns IDomainProxy, not IDomain 
domain.Name = "MIN_MAX"; 
domain.ItemName = new LocalizedProperty("en-US", "Mininum").Serialize(); 
domain.ItemValue = (int)MinMax.Minimum; 

new DomainService().Insert(domain); // If I try to cast by doing .Insert(domain as Domain), I get a null 

하지만 내 코드는 ".Add (도메인) PARAM)"(DomainService.cs에 도달 할 때는) 나는 오류 : "'Model.Domain'를 입력 유형 'Castle.Proxies.IDomainProxy'의 개체를 캐스팅 할 수 없습니다가."

가 왜이 오류와 호를 얻고있다 나는 IOC, 윈저 등을 사용하고 싶다고 생각해서 고쳐야겠습니까?

감사합니다.

답변

0

캐슬 윈저는 "프록시"인터페이스로 새로운 인스턴스를 만듭니다. 내 서비스 클래스에서 AutoMapper을 사용하여 종료되었습니다.