2016-09-22 76 views
1

當演員服務啓動時,我想自動訂閱described in the documentation中的任何事件。手動訂閱活動作品。但是,當服務被實例化時,是否有自動訂閱actor服務的方法,就像OnActivateAsync()一樣?服務結構演員服務依賴注入和演員事件

我想要做的是通過依賴注入來解決這個問題,它在MyActor類的實例化中通過OnActivateAsync調用來爲客戶端訂閱事件的接口。但是,我有依賴注入問題。

使用Microsoft.ServiceFabric.Actors.2.2.207應該支持到actor服務的依賴注入。現在,在實現Microsoft.ServiceFabric.Actors.Runtime.Actor時,將使用ActorService和ActorId參數創建默認構造函數。

我想添加我自己的構造函數,其中有一個額外的接口被傳入。你如何爲actor服務註冊以添加依賴項?在默認的Program.cs主要提供這個

IMyInjectedInterface myInjectedInterface = null; 
    //inject interface instance to the UserActor 
       ActorRuntime.RegisterActorAsync<MyActor>(
        (context, actorType) => new ActorService(context, actorType,() => new MyActor(myInjectedInterface))).GetAwaiter().GetResult(); 

但是在那裏說:行了「()=>新MyActor(myInjectedInterface)」它告訴我一個錯誤

委託「功能」不採取0 參數

望着在演員類的構造函數它具有以下

MyActor.Cs

internal class MyActor : Microsoft.ServiceFabric.Actors.Runtime.Actor, IMyActor 
    { 
     private ActorService _actorService; 
     private ActorId _actorId; 
     private IMyInjectedInterface _myInjectedInterface; 

     public SystemUserActor(IMyInjectedInterface myInjectedInterface, ActorService actorService = null, ActorId actorId = null) : base(actorService, actorId) 
     { 
      _actorService = actorService; 
      _actorId = actorId; 
      _myInjectedInterface = myInjectedInterface; 
     } 

1)如何解決嘗試解析Actor依賴項時收到的錯誤?

委託「功能」不拿0 參數

獎勵題:

如何解決IMyInjectedInterface的接口實例被注入到演員服務時打電話給我無狀態服務(呼叫客戶端)?

回答

2
IMyInjectedInterface myInjectedInterface = null; 
//inject interface instance to the UserActor 

ActorRuntime.RegisterActorAsync<MyActor>(
    (context, actorType) => new ActorService(context, actorType, 
     (service, id) => new MyActor(myInjectedInterface, service, id))) 

    .GetAwaiter().GetResult(); 

該函數的簽名,創建你的主角實例是:

Func<ActorService, ActorId, ActorBase> 

框架提供的ActorServiceActorId一個實例,您可以通過底座的構造中傳遞給你的演員的構造和向下。

獎金答:

使用情況在這裏是不是你在想什麼的有點不同。這裏的模式是通過接口分離具體實現的一般模式 - 這不是用於修改運行時行爲的客戶端的一種方式。所以調用客戶端不提供依賴的具體實現(至少不通過構造器注入)。依賴項在編譯時注入。一個IoC容器通常會這樣做,或者您可以手動提供一個容器。

+0

我有一個在我的web-API上構建Autofac註冊表的web-api。 Autofac註冊接口和實現。是否有可能讓共享項目上的接口爲(actor服務接口)並讓web-API使用autofac實現這些接口?我正在嘗試這種方式,因爲事件映射似乎是如何設置的。 –