저는 이것이 간단한 질문 일 수 있지만 아키텍처에 익숙하지 않은 것으로 알고 있습니다. 그러니 이해해 주셔서 감사합니다.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, 윈저 등을 사용하고 싶다고 생각해서 고쳐야겠습니까?
감사합니다.