1

我目前正在研究WP 8.1應用程序(運行時,不是silverlight),我想查找IoC容器。我使用Caliburn.Micro,這很好,因爲它在視圖模型中使用構造函數注入,但是我也有一個後臺代理,它無法使Caliburn.Micro的IoC容器加載。適用於Windows Phone 8.1的IoC容器

在我的應用程序,我可以做這樣的事情:

... 
public MyViewModel(ISyncService syncService, IOtherService otherService) 
{ 
    _syncService = syncService;//and so on for all services 
} 

或者是這樣的:

var syncService = IoC.Get<ISyncService>(); 

在我的經紀人,我不能做同樣的事情,因爲是卡利在那裏沒有用,所以我被迫做了這樣的事情:

var syncService = new SyncService(new AppSettings(), new AuthenticationService(webClient), 
      new PromotionalMessagesService(webClient)...)); 

我想你明白了。 ISyncService在構造函數中有7個服務需要,每個服務在其ctor中有更多。除了醜陋的代碼之外,另一個缺點是,如果我改變某個服務的ctor中的某些東西,我必須每次更新它。

您是否知道WP 8.1的任何良好IoC容器,或者您對此問題有更好的想法?

回答

1

如果你看一下「支持的.NET版本」表of this page,你會看到下面的DI庫支持WP8.1:

  • Autofac
  • Catel
  • DryOic
  • Endjin組成
  • 格雷斯
  • HaveBox
  • IfInjector
  • LightInject
  • 無限
  • Munq
  • Ninject
  • 簡單的注射器
  • TinyIoc
  • 統一
+0

謝謝,我不知道這件事。 我想我會嘗試Autofac,看看它是如何工作的。 – thewindev

0

我不認爲這是IoC容器的問題。如果將後臺代理單獨調用到主應用程序,則可能必須爲該進程配置所需的依賴關係。在autofac的情況下,您可以重新使用模塊來註冊所需的依賴項,然後構建容器。這些只是粗略的手工編碼片段:

var builder = new ContainerBuilder(); 
builder.RegisterModule<ServicesModule>(); 
backgroundTaskContainer = builder.Build(); 

內OnInvoke方法,那麼你可能只是需要用一個實例範圍(http://docs.autofac.org/en/latest/lifetime/instance-scope.html)隔離呼叫調用,或者只是處置容器本身的任務佈置時。

protected override void OnInvoke(ScheduledTask task) 
{ 
    using(var scope = backgroundTaskContainer.BeginLifetimeScope()) 
    { 
    var sync = scope.Resolve<SyncService>(); 
    } 
} 
相關問題