对,所以我对Castle很陌生,我试图弄清楚需要多远才能连接服务。下面是我正在使用的课程以及他们在我创建的世界中的位置的示例。为了正确连接Castle Windsor的DI课程,我需要在课程中多深入?
我试图完成它,正确连接了城堡,这样我可以调用TemplateEmailViaSalesforce类做的工作,并且必须通过DI从城堡连线了相关的类。但我不确定在注册组件时我需要走多远。下面是我的第一次尝试(我通过代码注册为审判,这是一对夫妇方法混搭创建容器)
IWindsorContainer container = new WindsorContainer();
container.AddFacility<FactorySupportFacility>();
// add the DAL mapper factory
container.AddComponent<ITemplateMapperFactory>();
// individual mappers
container.Register(Component.For<ICSGEmailTemplateMapper>().UsingFactory((ITemplateMapperFactory f) => f.CSGEMailTemplate));
container.Register(Component.For<IUserMapper>().UsingFactory((ITemplateMapperFactory f) => f.User));
container.Register(Component.For<IGoupMapper>().UsingFactory((ITemplateMapperFactory f) => f.Group));
container.Register(Component.For<IAccountTeamMapper>().UsingFactory((ITemplateMapperFactory f) => f.AccountTeam));
container.Register(Component.For<ISalesTeamMapper>().UsingFactory((ITemplateMapperFactory f) => f.SalesTeam));
container.Register(Component.For<ICSGFormulaMapper>().UsingFactory((ITemplateMapperFactory f) => f.CSGFormula));
container.Register(Component.For<ISFObjectDefinitionMapper>().UsingFactory((ITemplateMapperFactory f) => f.SFDCObjectDefinition));
container.Register(Component.For<ISFObjectValueMapper>().UsingFactory((ITemplateMapperFactory f) => f.SFDCObjectValue));
container.Register(Component.For<ISalesforceTemplateMapper>().UsingFactory((ITemplateMapperFactory f) => f.Template));
container.Register(Component.For<IRecipientMapper>().UsingFactory((ITemplateMapperFactory f) => f.Recipient));
// BLL stuff (domain components)...general
container.AddComponent<CSGEmailTemplateRepository, CSGEmailTemplateRepository>();
container.AddComponent<RecipientRepository, RecipientRepository>();
container.AddComponent<SFObjectDefinitionRepository, SFObjectDefinitionRepository>();
container.AddComponent<SFObjectValueRepository, SFObjectValueRepository>();
container.AddComponent<TemplateRepository, TemplateRepository>();
container.AddComponent<UserRepository, UserRepository>();
container.AddComponent<ITemplateService, TemplateService>();
// specific for this action
container.AddComponent<TemplateEmailerViaSalesforce>();
container.AddComponent<TemplateParse>();
// Aspects
container.AddComponent<TraceAspect>();
现在,我在后来得到一个错误:container.Resolve<TemplateEmailerViaSalesforce>();
AssemblerTests.ShouldCreateTemplateService : FailedTest method Tests.AssemblerTests.ShouldCreateTemplateService threw exception: Castle.MicroKernel.Facilities.FacilityException: You have specified a factory ('Castle.MicroKernel.Registration.GenericFactory`1[[CSG.Salesforce.TemplateEmailer.DAL.Access.IUserMapper, CSG.Salesforce.TemplateEmailer.DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' - method to be called: Create) for the component 'CSG.Salesforce.TemplateEmailer.DAL.Access.IUserMapper' CSG.Salesforce.TemplateEmailer.DAL.Access.IUserMapper that failed during invoke. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Castle.MicroKernel.ComponentRegistrationException: Type CSG.Salesforce.TemplateEmailer.DAL.ITemplateMapperFactory is abstract.
的失败似乎是IUserMapper定义为class UserMapper:BaseSalesforceMapper<UserData>,IUserMapper
的其他地图制作工作,但我得到一个错误,并不是所有的依存关系感到满意,这是我需要的IUserMapper注册完全满足。
为了获得这种有线连接,我必须走多远的兔子洞?在这一点上,我正在寻找BLL进入DAL和进入应用程序映射器的基础类,而这看起来并不正确。我正在努力弄清楚我必须注册什么,以及Castle本身对DI所隐含的做法。
任何帮助都将不胜感激。谢谢。 enter code here
请格式化异常消息。 – 2010-11-03 15:41:05