Внедрение зависимостей с помощью akka.net
Как создать слабую связь с akka.net? Предположим, у меня есть приложение MVC, которое использует Akka.net и которое я хочу иметь возможность тестировать контроллеры в приложении MVC без использования реальной системы акторов. Вроде как, когда вы хотите протестировать бизнес-уровень, используя реализацию moq хранилища доступа к данным. Обычно в этом случае вы определяете интервал для репозитория и можете тестировать без конкретного репозитория.
В этом случае я хочу протестировать свое приложение MVC без использования действующей системы актеров. Это может быть особенно актуально, если приложение MVC взаимодействует с удаленной актерской системой. В этом случае я хотел бы, чтобы какой-то интерфейс представлял доступ к удаленной системе актера и субъекту.
1 ответ
ActorSystem
инвентарь IActorRefFactory
public interface IActorRefFactory
{
IActorRef ActorOf(Props props, string name = null);
ActorSelection ActorSelection(ActorPath actorPath);
ActorSelection ActorSelection(string actorPath);
}
Это должно позволить вам использовать ваш фальшивый фреймворк по выбору, макетировать ActorSystem и получить этот макет возврата IActorRefs
для ваших контроллеров взаимодействовать с.
Эта статья дала мне много ясности о том, как построить мост между миром ссылок на актеров и ссылок на объекты:
https://havret.io/akka-net-asp-net-core.
Если вкратце, вы не можете передавать ссылки на актеров мира Akka через вашу DI-инфраструктуру, но вы можете передать (конструктору родительского актора) делегаты, которые будут создавать дочерние акторы и возвращать их ссылки на актеров. Вы можете настроить эти делегаты в своем классе запуска, где у вас есть IServiceProvider, который будет использоваться для разрешения зависимостей внутри каждого делегата.