Asp.net mvc Can';无法让EventAggregator在ASP.NET中与AutoFac一起工作

Asp.net mvc Can';无法让EventAggregator在ASP.NET中与AutoFac一起工作,asp.net-mvc,autofac,mediatr,eventaggregator,Asp.net Mvc,Autofac,Mediatr,Eventaggregator,在我使用AutoFac的ASP.NET MVC应用程序中,我需要一个简单的EventAggregator。我已经看过了——我真的很喜欢它的简单性和轻量级,因为我觉得一个完整的服务总线实现对于我的需求来说可能太过了。但如果有人有更好的方法,我会洗耳恭听:) 但是,我似乎无法使设置与我的web应用程序一起工作。我有一个非常简单的设置: HomeController(仅用于启动呼叫) PublishStuffService public class PublishStuffService : IPub

在我使用AutoFac的ASP.NET MVC应用程序中,我需要一个简单的EventAggregator。我已经看过了——我真的很喜欢它的简单性和轻量级,因为我觉得一个完整的服务总线实现对于我的需求来说可能太过了。但如果有人有更好的方法,我会洗耳恭听:)

但是,我似乎无法使设置与我的web应用程序一起工作。我有一个非常简单的设置:

HomeController(仅用于启动呼叫)

PublishStuffService

public class PublishStuffService : IPublishStuffService
    {
        private readonly IMessageHub _hub;

        public PublishStuffService(IMessageHub hub)
        {
            _hub = hub;
        }

        public void PublishStuff(string message)
        {
            _hub.Publish(message);
        }
    }
public class SubscribeToStuffService : ISubscribeToStuffService
    {
        private readonly IMessageHub _hub;

        public SubscribeToStuffService(IMessageHub hub)
        {
            _hub = hub;
            _hub.Subscribe<string>(HandleSubscription);
        }

        public void HandleSubscription(string message)
        {
            Debug.WriteLine("===================");
            Debug.WriteLine(message);
            Debug.WriteLine("===================");
        }
    }
订阅ToStuffService

public class PublishStuffService : IPublishStuffService
    {
        private readonly IMessageHub _hub;

        public PublishStuffService(IMessageHub hub)
        {
            _hub = hub;
        }

        public void PublishStuff(string message)
        {
            _hub.Publish(message);
        }
    }
public class SubscribeToStuffService : ISubscribeToStuffService
    {
        private readonly IMessageHub _hub;

        public SubscribeToStuffService(IMessageHub hub)
        {
            _hub = hub;
            _hub.Subscribe<string>(HandleSubscription);
        }

        public void HandleSubscription(string message)
        {
            Debug.WriteLine("===================");
            Debug.WriteLine(message);
            Debug.WriteLine("===================");
        }
    }
这显然解决了订户的问题。但这并没有真正的帮助,因为它违背了在依赖项之间实现松散耦合的目的

所以问题变成了-我如何让AutoFac解析我的订阅者,而不必将它们作为依赖项添加到消息总线上的任何地方?这能做到吗

更新2
找到AutoFac的这个漂亮的小发布/订阅扩展:。在启动事件聚合器并使用AutoFac运行时,它可以满足我的所有需要。

这里缺少一些信息。我从未使用过EventAggregator,但您没有向人们展示
isSubscribeToStuffService
实际使用/实例化的位置。从这个。。。它看起来从未被使用过,如果它从未被实例化(并且,我假设,当消息发布时,它是活动的),那么它将不会响应事件,对吗?大概再说一次,我不是EventAggregator的人,所以可能在这里帮不上忙。我的想法是不要在应用程序的不同部分之间创建紧密耦合。因此,基本上,消息中心/服务总线(无论您如何称呼它)应该保存关于发布到它的事件的信息,然后订阅者应该自动被调用,而不必使用它们。因此,基本上,当事件发生时,我可以有几个不同的操作发生(例如,在“用户创建”事件上,我可能希望向用户发送欢迎电子邮件以及向会计部门发送通知)。但我无法让订阅者与AutoFac连接:(@travisilligb)但结果(可能也是原因)是正确的-iSubscribeTooth(任何其他订阅者)似乎没有“活动”或启动。但我猜这是因为我没有正确设置IoC以使其工作(或者其他人可能会有更好的建议)。这是一个应用程序设计问题,而不是IoC。Autofac不负责确定如何或何时实例化您的订阅者,这是应用程序代码。当您需要应用程序代码中的实例时,这是IoC。
public class HomeController : Controller
    {
        private readonly IPublishStuffService _publishStuffService;
        private readonly IMessageHub _hub;
        private readonly ISubscribeToStuffService _subscribeToStuffService;

        public HomeController(IPublishStuffService publishStuffService, IMessageHub hub, ISubscribeToStuffService subscribeToStuffService)
        {
            _publishStuffService = publishStuffService;
            _hub = hub;
            _subscribeToStuffService = subscribeToStuffService;
        }
        ...
    }