是否可以使用Umbraco 7 ContentService事件处理程序的依赖注入?

时间:2014-06-04 21:44:26

标签: dependency-injection umbraco7

我正在使用带有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来创建我的事件处理程序?

1 个答案:

答案 0 :(得分: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中使用依赖注入的更多信息,请参阅 http://www.wearesicc.com/getting-started-with-umbraco-7-and-structuremap-v3/