[英]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.