簡體   English   中英

使用StructureMap創建需要構造函數參數的類的實例

[英]Create instances of a class that needs a constructor argument with StructureMap

我有以下課程:

public class AllowanceManager : IAllowanceManager
{
    public AllowanceManager(ITranslationManager t_Manager, ISessionManager s_Manager)
    {...}
}

public class TranslationManager : ITranslationManager
{
    public TranslationManager(string culture) 
    {...}
}

public class SessionManager : ISessionManager
{
    public SessionManager(string key) 
    {...}
}

如何在ObjectFactory中初始化此類,以便獲取IAllowanceManager的實例也自動裝配並初始化(使用構造函數參數)StateManager和TranslationManager。 所以我只需要像這樣檢索IAllowanceDeduction的實例:

IAllowanceManager a_Manager = ObjectFactory....// Gets Allowancemanager configured    with initialized instances of IStateManager and ITranslationManager

編輯:更短。

把它放在你的bootstrapper代碼中:

ForRequestedType<IAllowanceManager>().TheDefault.Is
       .ConstructedBy(() => new Allowancemanager(new StateManager(), new TranslationManager()));

使用2.6.1語法可以編寫:

For<ISessionManager>().Use<SessionManager>()
  .Ctor<string>("key").Is(c => GetSessionKey());
For<ITranslationManager>().Use<TranslationManager>()
  .Ctor<string>("culture").Is(c => Thread.CurrentThread.CurrentCulture.Name);
For<IAllowanceManager>.Use<AllowanceManager>();

其中GetSessionKey以類似於文化解析的方式返回會話密鑰。

有關如何解析構造函數參數的更深入描述,請參閱此博客條目

我想出了以下解決方案:

IStateManager stateManager = ObjectFactory
    .With<string>("key")
    .GetInstance<IStateManager>();

ITranslationManager translationManager = ObjectFactory
    .With<string>("culture")
    .GetInstance<ITranslationManager>();

manager = ObjectFactory
    .With<ITranslationManager>(translationManager)
    .With<IStateManager>(stateManager)
    .GetInstance<IAllowanceDeductionManager>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM