Ենթադրենք, ես ունեի HomeViewModel
անունով ելքային մոդել, որն ուներ FooterText
անունով հատկություն, որը ես ուզում էի բեռնել կարգավորումների օբյեկտից (ասենք HomeSettings
), որը վերցված էր կոնտեյներից (այսինքն՝ StructureMap):
Վարքը
Իմ պահվածքը նման կլինի.
public class HomeFooterBehavior : BasicBehavior
{
private readonly HomeSettings _settings;
private readonly IFubuRequest _request;
public HomeFooterBehavior(HomeSettings settings, IFubuRequest request)
: base(PartialBehavior.Executes)
{
_settings = settings;
_request = request;
}
protected override DoNext performInvoke()
{
SetupFooter();
return DoNext.Continue;
}
public void SetupFooter()
{
var viewModel = _request.Find<HomeViewModel>().First();
viewModel.HomeFooterText = _settings.FooterText;
}
}
Այս վարքագիծը վերցնում է HomeSettings
օբյեկտը և IFubuRequest
օբյեկտը (երկուսն էլ ներարկված կախվածություններ), այնուհետև հարցումից ստանում է HomeViewModel
(ելքային մոդել) և այնուհետև սահմանում է HomeFooterText
հատկությունը ելքային մոդելի վրա՝ հիմնվելով պարամետրերի օբյեկտի արժեքի վրա:
ԾԱՆՈԹԱԳՐՈՒԹՅՈՒՆ. Ես ենթադրում եմ, որ դուք արդեն ունեք ձեր HomeSettings
օբյեկտը միացված է կոնտեյների մեջ (օրինակ՝ օգտագործելով FubuMVC-ում ներկառուցված ISettingsProvider նյութը): Եթե դուք դեռ չունեք սա, տեղեկացրեք ինձ, և ես կարող եմ տեղադրել որոշ կոդ, թե ինչպես դա անել:
Կոնվենցիայի միացում
Վարքագիծը լարելու համար դուք պետք է սահմանեք կոնվենցիան IConfigurationAction
-ի միջոցով, օրինակ՝
public class HomeFooterBehaviorConfiguration : IConfigurationAction
{
public void Configure(BehaviorGraph graph)
{
graph.Actions()
.Where(x => x.HasOutput &&
x.OutputType().Equals(typeof(HomeViewModel)))
.Each(x => x.AddAfter(Wrapper.For<HomeFooterBehavior>()));
}
}
Սա իսկական համր կոնվենցիա է ցուցադրական նպատակներով։ Ձեր նախագծում դուք կարող եք այն մի փոքր ավելի ընդհանուր դարձնել: Օրինակ՝ ցանկացած ելքային մոդել, որն ունի հատկանիշ, կամ իրականացնում է հատուկ ինտերֆեյս և այլն: Փաստորեն, դուք կարող եք ստուգել բոլոր ելքային մոդելները՝ տեսնելու, թե արդյոք դրանք պարունակում են որևէ հատկություն, որը համապատասխանում է որոշակիին: չափանիշները (օրինակ, բոլոր հատկությունները, որոնք ավարտվում են «Կարգավորումներով», ինչպես «FooterSettings» կամ այլ բան):
Մի վախեցեք սահմանել նման լայնածավալ կոնվենցիաներ՝ կապված արդյունավետության հետ կապված խնդիրների հետ, քանի որ այս ամբողջ կոնվենցիայի կոդը գործում է մեկնարկի պահին և ոչ ամեն հարցում:
Նշեք «AddAfter» և «Wrapper.For» զանգը: Դա հիմնականն է նրանով, որ այն տեղադրում է ձեր վարքագիծը հետո վերահսկիչի գործողությունը կատարվում է, բայց նախքան տեսքը ցուցադրելը:
Այժմ, երբ դուք ունեք ձեր վարքագիծը և ձեր կոնվենցիան սահմանված, ժամանակն է այն մուտքագրել ձեր FubuRegistry-ում:
Ձեր կոնվենցիայի միացում ձեր FubuRegistry-ում
«Երթուղիներ» զանգից հետո։ Ձեր FubuRegistry-ում ավելացրեք այսպիսի տող.
ApplyConvention<HomeFooterBehaviorConfiguration>();
Վերակազմավորեք և այն պետք է աշխատի:
Խնդրում եմ տեղեկացնել ինձ, եթե որևէ խնդիր առաջանա:
26.02.2011