Правильно, я новичок в Касле и пытаюсь выяснить, как далеко мне нужно зайти, чтобы подключить услугу. Ниже приведен пример классов, с которыми я работаю и где они находятся в мире, который я создал.
Что я пытаюсь сделать, чтобы правильно подключить Castle, чтобы я мог вызывать класс TemplateEmailViaSalesforce для выполнения работы и иметь зависимые классы, подключенные через DI от Castle. Но я не уверен, как далеко я должен идти при регистрации компонентов. Ниже моя первая попытка (я регистрируюсь с помощью кода в качестве пробной версии, и это гибрид нескольких методов для создания контейнера)
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 и в базовый класс, из которого построены средства отображения приложений, и это кажется неправильным. Я изо всех сил пытаюсь выяснить, что мне нужно зарегистрировать и что будет неявно делать с DI самим Каслом.
Любая помощь будет приветствоваться. Благодаря. enter code here