s # arp инъекция замка - PullRequest
       30

s # arp инъекция замка

1 голос
/ 30 ноября 2010

У меня есть мыльный веб-сервис в моем веб-слое (архитектура s # arp), который использует такой сервис:

public ReportWebService(IReportService ReportService)
{
 Check.Require(ReportService != null, "ReportService may not be null");
 this.ReportService = ReportService;
}

Может кто-нибудь напомнить, как и где я настраиваю внедрение реализацииснова за IReportService?

Спасибо.

Кристиан

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Краткий ответ : просто поместите ReportService в yourProject.ApplicationServices, и он будет введен.

Длинный ответ : в вашем Project.Web в Global.asax вы найдете метод InitializeServiceLocator ().Это вызывает статический метод AddComponents для ComponentRegistrar.

ComponentRegistrar находится в yourProject.web / CastleWindsor.Там вы найдете

public static void AddComponentsTo(IWindsorContainer container)
    {
        AddGenericRepositoriesTo(container);
        AddCustomRepositoriesTo(container);
        AddApplicationServicesTo(container);

        container.AddComponent("validator",
            typeof(IValidator), typeof(Validator));
    }

Если вы посмотрите на AddApplicationServicesTo, вы можете увидеть, что он регистрирует все типы в вашемProject.ApplicationServices (.WithService.FirstInterface ()):

private static void AddApplicationServicesTo(IWindsorContainer container)
    {
        container.Register(
            AllTypes.Pick()
            .FromAssemblyNamed("NewittsStore.ApplicationServices")
            .WithService.FirstInterface());
    }
0 голосов
/ 30 ноября 2010

Вот из ComponentRegistrar.cs:

    /// <summary>
    /// The add application services to.
    /// </summary>
    /// <param name="container">
    /// The container.
    /// </param>
    private static void AddApplicationServicesTo(IWindsorContainer container)
    {
        container.Register(AllTypes.Pick().FromAssemblyNamed("MyAssembly.ApplicationServices").WithService.FirstInterface());
    }

, а вот из службы

    private readonly IDocumentManagementService _client;

    public DocumentService(IDocumentManagementService client)
    {
        _client = client;
    }

Это должно помочь вам.

...