3

私は MVC プロジェクトで Umbraco 7.1.1 を使用しており、依存性注入 (私の場合は Castle.Windsor) を使用するように構成しました。また、NServiceBus を使用してメッセージなどを送信していますが、かなりうまく機能しています。

現在、ContentService Published イベントにフックしようとしています。NServiceBus イベントを発行して、コンテンツが変更されたことを他のサービスに警告しようとしています。私がやりたいことは次のようなものです:

public class ContentPublishedEventHandler : ApplicationEventHandler
{
    public IBus Bus { get; set; }

    public ContentPublishedEventHandler()
    {
        ContentService.Published += ContentServiceOnPublished;
    }

    private void ContentServiceOnPublished(IPublishingStrategy sender, PublishEventArgs<IContent> publishEventArgs)
    {
        Bus.Publish<ContentUpdatedEvent>(e =>
        {
            e.UpdatedNodeIds = publishEventArgs.PublishedEntities.Select(c => c.Id);
        });
    }
}

しかし、この場合、Bus依存性注入フレームワークが適切に構成されていないか、(私が推測するように) 呼び出されないため、 null です。

バスへの静的参照に依存していれば動作させることができますが、できればそれは避けたいと思います。私がやろうとしていることは可能ですか?つまり、これらの Umbraco イベントで依存性注入を使用しますか? その場合、Umbraco に Castle.Windsor を使用してイベント ハンドラーを作成するように指示するには、どのような構成が必要ですか?

4

1 に答える 1

0

それでも答えを探している場合は、ContentPublishedEventHandler コンストラクターに依存関係を挿入する方がよいため、コードは次のようになります。

public class ContentPublishedEventHandler : ApplicationEventHandler
{
    public IBus Bus { get; set; }
    
    public ContentPublishedEventHandler(IBus bus)
    {
        Bus = bus;
    }

    protected override void ApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        ContentService.Published += ContentServiceOnPublished;

        base.ApplicationStarting(umbracoApplication, applicationContext);
    }
        
    
    private void ContentServiceOnPublished(IPublishingStrategy sender, PublishEventArgs<IContent> publishEventArgs)
    {
        Bus.Publish<ContentUpdatedEvent>(e =>
        {
            e.UpdatedNodeIds = publishEventArgs.PublishedEntities.Select(c => c.Id);
        });
    }
}

Umbraco 7 での依存性注入の使用に関する詳細については、 https://web.archive.org/web/20160325201135/http: //www.wearesicc.com/getting-started-with-umbraco-7 を参照してください。 -and-structuremap-v3/

于 2015-03-26T22:35:44.233 に答える