2016-07-10 2 views
1

Akka .NET과 함께 Dependency Injection을 설정하려고합니다. 주제에 인 Pluralsight 과정에 따라, 나는 다음과 같은 적응 해낸 :Ninject에서 종속성 삽입을 설정하는 방법은 무엇입니까?

 var container = new StandardKernel(); 
     container.Bind<ITimeService>().To<LocalTimeService>(); 
     container.Bind<TimeLordActor>().ToSelf(); 

     using (var actorSystem = ActorSystem.Create("MyActorSystem")) 
     { 
      var resolver = new NinjectDependencyResolver(container, actorSystem); 

      var actor = actorSystem.ActorOf(Props.Create<TimeLordActor>(), 
       "TimeLordActor"); 
      actor.Tell("Give me the time!"); 

      Console.WriteLine("Press ENTER to exit..."); 
      Console.ReadLine(); 
     } 

TimeLordActor의 생성자 유형 ITimeService의 매개 변수를 기대하고있다. 실행시

그러나, 나는 다음과 같은 오류가 발생합니다 :

[ERROR][7/10/2016 5:39:42 PM][Thread 0012][akka://MyActorSystem/user/TimeLordActor] Error while creating actor instance of type AkkaNetDiExperimental.TimeLordActor with 0 args:() Cause: [akka://MyActorSystem/user/TimeLordActor#1586418697]: Akka.Actor.ActorInitializationException: Exception during creation ---> System.TypeLoadException: Error while creating actor instance of type AkkaNetDiExperimental.TimeLordActor with 0 args:() ---> System.MissingMethodException: Constructor on type 'AkkaNetDiExperimental.TimeLordActor' not found. at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark) at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Activator.CreateInstance(Type type, Object[] args) at Akka.Actor.Props.ActivatorProducer.Produce() at Akka.Actor.Props.NewActor() --- End of inner exception stack trace --- at Akka.Actor.Props.NewActor() at Akka.Actor.ActorCell.CreateNewActorInstance() at Akka.Actor.ActorCell.<>c__DisplayClass118_0.<NewActor>b__0() at Akka.Actor.ActorCell.UseThreadContext(Action action) at Akka.Actor.ActorCell.NewActor() at Akka.Actor.ActorCell.Create(Exception failure) --- End of inner exception stack trace --- at Akka.Actor.ActorCell.Create(Exception failure) at Akka.Actor.ActorCell.SysMsgInvokeAll(EarliestFirstSystemMessageList messages, Int32 currentState)

Akka .NET Dependency Injection의 공식 문서를 직접 배우를 만들 때 ActorSystem 인스턴스에 DI() 확장 방법을 사용할 것을 제안 :

// Create the Props using the DI extension on your ActorSystem instance 
var worker1Ref = system.ActorOf(system.DI().Props<TypedWorker>(), "Worker1"); 
var worker2Ref = system.ActorOf(system.DI().Props<TypedWorker>(), "Worker2"); 

그러나 액터 시스템에서이 확장 메소드조차 찾을 수 없었습니다.

누군가가 배우 시스템 자체의 의존성 주입을 사용하여 간단한 배우를 만드는 방법을 설명해 주실 수 있습니까?

답변

0

나는 이것을 알아 냈다. 문서의 제안대로 DI() 확장 방법을 사용해야합니다. 이것은 Akka.DI.Core 네임 스페이스에 있습니다.

var actor = actorSystem.ActorOf(actorSystem.DI().Props<TimeLordActor>(), 
       "TimeLordActor"); 
:

using Akka.DI.Core; 

그런 다음 문서에서 사용하는 방법을 반영하기 위해 배우 생성을 업데이트하는 것을 잊지

관련 문제