【发布时间】:2014-01-04 11:43:53
【问题描述】:
我知道这可能是一个简单的问题,但我对建筑很陌生,我想把它做好。所以,谢谢你的理解。
我也是 Castle Windsor 的新手,既不使用工作单元也不使用存储库模式 - 我什至不知道是否需要它们来解决我目前遇到的问题。
我想要完成的事情:
我有一个名为 IDomain 的接口,它只有一些属性和一个具体的 POCO 类 Domain 来实现它。
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,即,我正在拦截对我的 Domain 类的方法调用。查看我的 Windsor 容器安装程序:
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(Domain)param)”(DomainService.cs)时,我收到错误消息:“无法投射对象'Castle.Proxies.IDomainProxy' 类型的类型为 'Model.Domain'。"
考虑到我确实想使用 IoC、Windsor 等,为什么会出现此错误以及我应该如何修复它?
最好的问候。
【问题讨论】:
标签: entity-framework inversion-of-control castle-windsor castle-dynamicproxy aop