MEF рдореЗрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░ рдХреЗ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВред
рдкреНрд░рдмрдВрдзрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдЙрд░реНрдл тАЛтАЛрдПрдордИрдПрдл, рдЬреЛ рдХрд┐ рдлреИрдВрд╕реА рдСрдЯреЛрдлрд╛рдХ рдФрд░ рдЕрдиреНрдп рд╕реНрдЯреНрд░рдХреНрдЪрд░рдореИрдк рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рдХрд╣реЗрдВрдЧреЗ, рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рд░рдЪрдирд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рддрд░реАрдХрд╛ рд╣реИред рдФрд░ MEF рдХреА рддрд╛рдХрдд рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдореНрдорд╛рдирд┐рдд рд░рдЬрд╝рд╛рдЬрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рджреГрд╢реНрдпрддрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, MEF рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╕реНрдХреЛрдк рд╣реИрдВ - рд╢реЗрдпрд░реНрдб (рдкреНрд░рддрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг) рдФрд░ рдиреЙрдирд╕реЗрд░реЗрдб (рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдпрд╛рдд рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг)ред рдпреВрдирд┐рдЯреА рдХреЗ рдмрд╛рдж рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рдВрднрд╡рддрдГ рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ: "рдФрд░ рдкреНрд░рддрд┐ рдзрд╛рдЧрд╛ рджреГрд╢реНрдпрддрд╛ рдХрд╣рд╛рдБ рд╣реИ?"ред рдпрд╛, WCF рд╕реЗрд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, "рдкреНрд░рддрд┐-рдХреЙрд▓"ред
рдпрд╣ рд╕рд╡рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд┐ рдпрд╣ рд░рдЪрдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдореИрдВ рдЗрди рджреГрд╢реНрдпрддрд╛ рдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдЖрдк рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХреЛрдб рдХреЛ рдЫреВ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ - рдЗрд╕реЗ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдХреЗрд╡рд▓ рдПрдордИрдПрдл 2.0 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреАрдЪреЗ - рдХреНрдпреЛрдВред

So.
рдкрд╣рд▓реЗ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
тАЬрдирд┐рд░реНрдпрд╛рдд рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреБрдЫ рд╕рдВрджрд░реНрдн рд╣реИред рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд┐рд░реНрдпрд╛рдд рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред "

рдореБрдЭреЗ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЗрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрдХреЛрд╢ "рдХреА-рд╡реИрд▓реНрдпреВ" рдореЗрдВ рджреЗрдЦрд╛, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИред рдмреЗрд╢рдХ, рдкреВрд░реЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрдХреЛрд╢ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред

public abstract class AffinityStorage<TExport, TAffinity> where TExport : class { private ConcurrentDictionary<TAffinity,TExport> _partStorage = new ConcurrentDictionary<TAffinity,TExport>(); internal TExport GetOrAdd(TAffinity affinity, Func<TExport> creator) { var t = _partStorage.GetOrAdd(affinity, (a) =>creator()); return t; } internal void RemoveAffinity(TAffinity affinity) { TExport val; _partStorage.TryRemove(affinity, out val); } } 


рдпрд╣рд╛рдБ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдХрд┐ рд╣рд░ рдмрд╛рд░ рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рдо рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЙрд╕реЗ рдПрдХ рдкреВрд░реНрдг рднрд╛рдЧ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрднрд╡рддрдГ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рдеред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдЖрд▓рд╕реА" рд░реВрдк рдореЗрдВ рднрд╛рдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MEF рдХреНрд╖рдорддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВред рдФрд░ рд╕рдВрджрд░реНрдн рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдФрд░ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ - рд░рд╕реАрдж рдиреАрддрд┐ред рд╡рд╣ рдиреЙрдирд╢реЗрдб рдХреЗ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд▓рд╕реА рдирд┐рд░реНрдпрд╛рдд рд╣рд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдирдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдирд╣реАрдВ, рд╣рдорд╛рд░рд╛ рднрдВрдбрд╛рд░рдг рд╕рдордЭ рдЬрд╛рдПрдЧрд╛)ред

  public abstract class Policy<TExport, TAffinity> where TExport : class { private readonly AffinityStorage<TExport, TAffinity> _storage; [Import(AllowRecomposition = true, RequiredCreationPolicy = CreationPolicy.NonShared)] private Lazy<TExport> _lazyPart; private bool _wasCreated; private int _wasDisposed; protected abstract TAffinity GetAffinity(); protected Policy(AffinityStorage<TExport, TAffinity> storage) { _storage = storage; } private TExport GetExportedValue() { _wasCreated = true; return _storage.GetOrAdd(GetAffinity(), () => _lazyPart.Value); } protected void DestroyAffinity(TAffinity affinity) { var wasDisposed = Interlocked.CompareExchange(ref _wasDisposed, 1, 0); if (_wasCreated && wasDisposed == 0) { _storage.RemoveAffinity(affinity); } } public static implicit operator TExport(Policy<TExport, TAffinity> threadPolicy) { return threadPolicy.GetExportedValue(); } } 


рдпрд╣рд╛рдБ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдБ рд╣реИрдВ:

рдореИрдВ рдЖрдЦрд┐рд░реА рдмрд┐рдВрджреБ рдкрд░ рд░рд╣реВрдВрдЧрд╛ред
рдЬрдм рд╕реЗ рд╣рдорд╛рд░реЗ AffinityStorage рд╡рд░реНрдЧ рдХреЗ рд▓реЗрдЦрди рдХреЗ рдмрд╛рдж рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рднрдВрдбрд╛рд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдирдХреА рд╕рдлрд╛рдИ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рд╛рдл рдХрд░рдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд╣реИ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдмрд╕ рдЙрдард╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рдирд┐рдкрдЯрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдпрд╛рдд рдХрд╣рд╛рдВ рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рднрд╛рдЧреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд┐ рднрд╛рдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рд╕рдВрджрд░реНрдн рдХреЗ рдкрд░рд┐рд╕рдорд╛рдкрди рдХреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн-рдмрджреНрдз рднрдВрдбрд╛рд░ рдХреЛ рд╕рд╛рдл рдХрд░ рджреЗрдВрдЧреЗред
рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рдкрд░рд┐рд╕рдорд╛рдкрди рдХрд╛ рдХреНрд╖рдг, рдлрд┐рд░ рд╕реЗ, рдЗрд╕реЗ рдиреАрддрд┐ рдХреЗ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди - рдзрд╛рд░рд╛ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

  [Export(typeof(ThreadStorage<>))] [PartCreationPolicy(CreationPolicy.Shared)] internal sealed class ThreadStorage<TExport> : AffinityStorage<TExport, Thread> where T : class { } [Export(typeof (ThreadPolicy<>))] [PartCreationPolicy(CreationPolicy.NonShared)] public sealed class ThreadPolicy<TExport> : Policy<TExport, Thread> where T : class { protected override Thread GetAffinity() { return Thread.CurrentThread; } [ImportingConstructor] internal ThreadPolicy( [Import(RequiredCreationPolicy = CreationPolicy.Shared)] ThreadStorage<TExport> storage) : base(storage) { } } 


рдпрд╣ рдХреЗрд╡рд▓ рдПрдордИрдПрдл 2.0 рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рддреНрдпреЗрдХ рдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдВрдбрд╛рд░рдг рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП):
  TestPart part = _container.GetExportedValue<ThreadPolicy<TestPart>>(); 


рдпрд╛ рддреЛ:

 [Export] class Outer { Inner _perThreadObject; [ImportingConstructor] Outer([Import]ThreadPolicy <Inner> perThreadObject) { _perThreadObject = perThreadObject; } } 


рдХреНрдпрд╛ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд░рд╣рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЬрдЯрд┐рд▓ рди рд╣реЛ, рд▓реЗрдХрд┐рди рдЧреАрддрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ:
  1. рд▓реЗрди-рджреЗрди рдФрд░ WCF рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рди рд╣реИ; рдкреНрд░рд╛рджреБрд░реНрднрд╛рд╡ Transaction.Current рдФрд░ OperationContete.Current рд╣реИред
  2. рдпрджрд┐ рд╕рдВрджрд░реНрдн рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдЯреИрдлрд┐рдирд┐рдЯреА) рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдиреЙрдирд╢реЗрдпрд░ рдирд┐рд░реНрдпрд╛рдд рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  3. рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрд╡рд░реЛрдзрди - рдпрджрд┐ рд╣рдо рдПрдХ рднрд╛рдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЗрди-рджреЗрди рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ рднрд╛рдЧ рдПрдХ рд▓реЗрдирджреЗрди рд╕рдВрд╕рд╛рдзрди рд╣реИ (ISinglePhaseNotification рдпрд╛ IEnlistmentNotification) рдФрд░ рдЗрд╕реЗ рдПрдХ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрди-рджреЗрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИред
  4. рдПрдХ рдмрдВрдзрди рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ - рдПрдХ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ, рдореИрдВ рдПрдХ рдереНрд░реЗрдб рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЬреЛ рд░реЗрдлрд░реЗрдВрд╕ рдПрдлрд╝рд┐рд▓рд┐рдЯреА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрджрд░реНрдн рд╕реНрдЯреНрд░реАрдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд▓реЗрди-рджреЗрди / рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП - рдореИрдВ рд╕рд┐рд░реНрдл рд▓реЗрдирджреЗрди / рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реВрдВред


рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рд╢рд╛рдпрдж рдХреЛрдИ рдорджрдж рдХрд░реЗрдЧрд╛ред

Source: https://habr.com/ru/post/In180307/


All Articles