Dependencies 使用akka.net进行依赖注入

Dependencies 使用akka.net进行依赖注入,dependencies,code-injection,akka.net,coupling,loose,Dependencies,Code Injection,Akka.net,Coupling,Loose,如何构建到akka.net的松散耦合?假设我有一个使用Akka.net的MVC应用程序,并且我希望能够在不使用真正的actor系统的情况下测试MVC应用程序中的控制器。有点像当您想使用数据访问存储库的moq实现来测试业务层。通常在这种情况下,您为存储库定义了一个间隔,并且可以在没有具体存储库的情况下进行测试 在本例中,我想测试我的MVC应用程序,而不使用实际的actor系统。如果MVC应用程序与远程参与者系统交互,这可能特别相关。在这种情况下,我需要某种类型的接口来表示对远程actor系统和ac

如何构建到akka.net的松散耦合?假设我有一个使用Akka.net的MVC应用程序,并且我希望能够在不使用真正的actor系统的情况下测试MVC应用程序中的控制器。有点像当您想使用数据访问存储库的moq实现来测试业务层。通常在这种情况下,您为存储库定义了一个间隔,并且可以在没有具体存储库的情况下进行测试


在本例中,我想测试我的MVC应用程序,而不使用实际的actor系统。如果MVC应用程序与远程参与者系统交互,这可能特别相关。在这种情况下,我需要某种类型的接口来表示对远程actor系统和actor的访问。

ActorSystem
实现
IActorRefFactory

public interface IActorRefFactory
{
    IActorRef ActorOf(Props props, string name = null);
    ActorSelection ActorSelection(ActorPath actorPath);
    ActorSelection ActorSelection(string actorPath);
}

这应该允许您使用您选择的模拟框架,模拟一个actor系统,并返回mock
iactorefs
,供您的控制器进行交互。

这篇文章让我更清楚地了解了如何在actor引用和对象引用之间架起一座桥梁:

如果简单地说,您不能通过DI框架传递Akka world actor引用,但是您可以传递(给父actor的构造函数)将创建子actor并返回其actor引用的委托。您可以在启动类中配置这些委托,在启动类中,您有IServiceProvider,用于解析每个委托内部的依赖关系