ืืื ืืืขื ืืืืื ืืขืจืงืืขืจื ืืขื ืืืื ืคืื ืืขื ืึทืจืืืงื. ืืขืจ ืึธืจืืืื ืขื ืคึผืืึทื ืืื ืืขืืืขื ืฆื ืืขืื ืืื, ืคืึทืจืืึธืืืขื ืขืฆื ืืื ืฆื ืคืึทืจืืืืขืจื ืื ื ืืฆื ืคืื ืึธืคึผืฉืคึผืืืืื ื ืืื ืึท ืคึผืฉืื ืึธืืขืจ ืจืขืึทืืืกืืืฉ ืืืึทืฉืคึผืื, ืึธืืขืจ ืืขืฉืึทืก ืืขื ืืฉืืึทืจืงืื ื ืขืก ืืื ืืขืืืขื ืื ืึธืคึผืฉืคึผืืืืื ื ืืื ื ืืฉื ืึทืืื ืคึผืึทืืขืืขื ืืื ืืื ืืขืืึทื ืง, LINQ ืืื ืกืืึธืืขืจ ืืื ืืื ืืืื ื ืืืืืขืจื. ืืืขืจ ืฆืื ืกืืฃ ืืื ืืื ืืจืืืกืืขืืืืื ืื ืืื ืืื ืืืื ืืขืืืื ื ืืขืืช ืืื ืื ืืืืืช... ืคืจืืื ืคืื ืื ืืขืื ืก-ืืขืฉืืืืข ืืขื ืขื ืืื ืืขืจ ืื ืฉื ืืืื ืืื ืืื ืื ืงืืืขื ืืืจื. ืืื ื ืื ืืืืฉืคึผืื ืืื ืืึทื ืฅ ืคึผืจืึธืกื ืืื ืืืคึผืืึทืืขื ืึทื ืืื ืคึผืจืื ืฆืืคึผ ืืื ืขืก ืืื ืืืืฉืึทืืืึทืื ืืขืืื ืืื ืึท ืคืึทืจื ืขืืื ื, ืขืก ืืื ืืขืืืขื ืึท ืืึทื ืฅ ืืฉืืงืึทืืืข, ืืื ืขืก ืืืื ื ืฆื ืืืจ, ืืขืืึทื ืกืืจืืืฉืึทื ืคืื ืืขืื: ืื ืคึผืจืึทื ืืืืฃ ืื ืืืืงืืึทื ืคืื ืื ืืืืคึผื ืืขืืข ืคืื โโืืขื ืึทืจืืืงื ืืื ืืขืืืขื ื ืื ืืืืขืจืงื ืจืขืื ืฆื ืคืื ืืจืืืกื ืืืง ืืึธืืืง: Moq, Autofac, EF Core ืืื ืื ืืขืจืข "ืืึทื ืืื ืื".
ืืื ืื ืืขืืืืื ืืจืืขืื ืืื ืืขืจ ืืขื ืจืืฉื ืคืื ืืขื ืึทืจืืืงื:
ืืื ืืืจ ืงืขื ืขื ืืขื, ืืขืจ ืืืืจ ืกืึทืืืืฉืขืกืฅ ื ืืฆื ืงืึทืืคึผืืืื ืืขืืึทืืืืฅ ืึทื ืฉืืึธื ืคืื ืืืืื ืจืืคื ืึธืคึผืฉืคึผืืืืื ื ืืืคึผ ืืขืืืึธืืก ืืื ืึท ืืจืืืก ืืืขื ืฆื ืืืืขืจ ืคืึทืจืืืืขืจื ืื ืึทืคึผืืึทืงืืืฉืึทื. ืขืก ืืื, ืคืื ืงืืจืก, IL ืืืืฉืึทื, ืึธืืขืจ ืืื ืืืึธืื ืืื ืฆื ืืืกืืืืื ืขืก, ืืืืึทื ืืึธืก ืืื ืื ืืขืจืกื ืึทืจืืขื-ืืื ืืขื ืกืืืืข ืืืขื ืฆื ืืืจืืคืืจื ืื ืึทืจืืขื, ืืืึธืก ืืื ืคืจืึธื ืืื ืขืจืจืึธืจืก.
ืงืึทื ืกืืืขืจืื ื ืึทื ืืื ืืึธืื ืฉืืขื ืืืง ืืขืืืืื ืึท ืขื ืืขื ืืืื ืื ื ืืืขืื ืื ืืืืงืืึทื ืคืื ืึธืคึผืฉืคึผืืืืื ื, ืืื ืืื ื ืืฉื ืืขืจ ืืืืคึผื ืืืขื ืฆื ืคืจืขืื ืืขื ืืืืจ ืก ืงืึทื ืงืืืืฉืึทื ื.
ืืื ืึธืคื ืืจืขืคื ื ืึทืืื ื ืืฆื ืคืื ืึธืคึผืฉืคึผืืืืื ื ืืื ืื ืคืึทืจื ืขืืื ื. ืืขืจ ืืืคึผ ืืื ืืขื ืืืขื. ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืคืึทืจืืึธื ืืื ืืขื ืืืขื. ืื SetValue ืืืคึฟื ืืื ืืขืจืืคื ืืื ืึทืืขืืขื ืคืจืืื ืืื. ืื ืืืขืจื ืืื ืื ืืขืงืืืขื ืืื ืื ืฆืื ืคืขืื, ืึทืืขืืขื ืืื ืฆืืคืจืืื. ืืืืขืจ ืงืืื ืืขื ืืฉื - ืกืื ืืขืจื ืืื ืืึทื ืฉืึทืคึฟื ืคืืจื - ืฉืจืืึทืื ืืืืขืจ ืืงืกืืขื ืฉืึทื ื ืฆื ืึทืืืืฉืขืงืฅ, ืืืืืจื ืืืืฃ ืึทืืึท ืึท ื ืึทืืื ืืืคึผืืึทืืขื ืืืืฉืึทื "ืื ืืืืขืจืกืึทื" ืืึทืคึผืคึผืขืจืก ืคืื ืืืื ืืืคึผ ืฆื ืื ืืขืจื. ืื ืขืกืึทื ืก ืืื ืืืืฉืึทืืืึทืื ืืึธืก: ืืืจ ื ืขืืขื ืึทืืข ืื ืคืขืืืขืจ, ื ืขืืขื ืึทืืข ืื ืคึผืจืึธืคึผืขืจืืืขืก, ืืืขืจืืื ืืืืขืจ ืืื: ืืืื ืื ื ืขืืขื ืคืื ืื ืืืคึผ ืืืืืืืืขืจ ืืืืึทืื, ืืืจ ืืืกืคืืจื SetValue. ืคืื ืฆืืื ืฆื ืฆืืื ืืืคื ืืืจ ืืืืกื ืืืขื ืฆืืืื ืืขืืชืื ืืืื ืืืจ ืืืื ื ืืฉื ืืขืคืื ืขื ืขืคืขืก ืคืืจืืขืื ืืื ืืืื ืขื ืคืื ืื ืืืคื, ืืืขืจ ืืคืืื ืื ืืื ืื ื ืืืืกืืืขื ืืืืก ืคืืจืืขืกืขืจื ืื ืคืึธืจืฉืืขืืื ื. ืคึผืจืึผืืื / ืืึทืคึผื.
ืืื ืืื ืืขืืขื ืืขื ืืฉื ืจืืื ืืืขื ื ืื ืคึผืึทืจืกืขืจื ืืื ืืึทืคึผืขืจื ืึธื ืืืื ืืึธืจ ืึทืจืื ืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืืื ืื ืืืฉืื ืขื ืืืึธืก ืืขื ืขื ืืขืงืืืขื ืืืืืขืจ ืืื ืึทืจืืขื. ืืื ืืึธื ืืขืืขื ืืขื ืืฉื ืืึทืืึทืืื ืืืืขืจ ื ืึทืืื ืืืคึผืืึทืืึทื ืฅ ืืื ืืขืจ ืกืืจืึทืืขืืืขืก, ืืื ืืขืจ ืื ืืขืจืคืืืกืื, ืืื ืืขืจ ืื ืืืฉืขืงืฉืึทื ื, ืืื ืืืื ืืึธืก ืืืึธืื ืึทื ืืฉืืืืืงื ืื ืกืึทืืกืึทืงืืืึทื ื ืืึทืงืืฉืึทื ืึทืืืึท. ืื ื ืื ื ื ื ื ืื , ืืื ืฃ ืืืขืื ืข ืจืขืืืืืืฆืืขืก . ืืื ืคืึทืงื, ืืื ืืื ื ืืฉื ืืขืกืื ืื ืคืึทืงืืืฉ ืคืึธืจืฉืืขืืื ื ืจืื ืขื, ืืื, ืืืื ืืขืืืขื, ืืื ืคืฉืื ืืฉืืื ืืืฉื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืฆื ืึท ืืขืจ "ืึธืคึผืืืืึทื" ืืืื ืืื ืงืขื ืืึทืงืืืขื ืืืื ืืขื ื ืืืืฃ ืขืก. ืืขืจืืืขืจ, ืื ืขืจืฉืืขืจ ืืขืืฉืขืจืืึทื ืฅ ืืืกืงืึทืกื ืืื ืื ืขืืขืก ืฆืขืืืฉื ืืืจ.
ืืื ืืจืึทืืื ืคืืืข ืคืื โโืืืจ, ืืืืขื ืขื Richter ืึธืืขืจ ืื ืืขืจืข ืืืืขืึธืืึธืืืกืฅ, โโืืึธืื ืืขืคึฟืื ืขื ืึท ืืึธืจ ืฉืืื ืืขืจืงืืขืจืื ื ืึทื ืึธืคึผืฉืคึผืืืืื ื ืืื ืงืึธื ืืื ืึท ืืขืจืฉืืื ืื ื ืืืึธืก ืืื ืึท ืืึธืจ ื ืขืืึทืืืื ืคึผืจืึทื ืืืืฃ ืื ืคืึธืจืฉืืขืืื ื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื.
ืจืืคื ืึธืคึผืฉืคึผืืืืื ื ืคืึธืจืกืขืก ืื CLR ืฆื ืืืื ืืืจื ืึทืกืขืืืืื ืฆื ืืขืคึฟืื ืขื ืื ืืืื ืขืจ ืืื ืืึทืจืคึฟื, ืฆืืขื ืึทืจืืืฃ ืืืืขืจ ืืขืืึทืืึทืืึท, ืคึผืึทืจืก ืืื, ืืื"ื ื. ืืื ืึทืืืฉืึทื, ืึธืคึผืฉืคึผืืืืื ื ืืฉืขืช ืืจืึทืืืขืจืกืื ื ืกืืงืืืึทื ืกืื ืคืืจื ืฆื ืื ืึทืืึทืงืืืฉืึทื ืคืื ืึท ืืจืืืก ืกืืืข ืคืื โโืืึผืจืื. ืืืจ ื ืืฆื ืืืงืึธืจื, CLR ืืคืืขืงื ืื GC ืืื ืคืจืืื ืึธื ืืืืื. ืขืก ืืึธื ืืืื ืืืืขืจืงื ืคึผืึทืืขืืขื, ืืืืืื ืืืจ. ืื ืจืืืืง ืึทืืึทืื ืฅ ืคืื ืืึผืจืื ืืืืฃ ืืึธืืขืจื ืคึผืจืึธืืืงืฆืืข ืกืขืจืืืขืจืก ืึธืืขืจ ืืืึธืืงื ืืืฉืื ืขื ืืึธื ื ืื ืคืึทืจืืืึทืื ืืืื ืคึผืจืึทืกืขืกืื ื ืืืืืื. ืืื ืคืึทืงื, ืื ืืขืจ ืืึผืจืื, ืื ืืขืจ ืืกืชึผืื ืืืจ ืืืขื ืืึทืืขืจืงื ืืื ืื GC ืึทืจืืขื. ืึธืคึผืฉืคึผืืืืื ื ืืื, ืืื ืืขืึธืจืืข, ืึทื ืขืงืกืืจืข ืจืืื ืฉืืึทืืข ืคึฟืึทืจ ืืื.
ืึธืืขืจ, ืืืจ ืึทืืข ื ืืฆื IoC ืงืึทื ืืืื ืขืจื ืืื ืืึทืืข ืืึทืคึผืขืจื, ืื ืึทืคึผืขืจืืืืื ื ืคึผืจืื ืฆืืคึผ ืคืื ืืืึธืก ืืื ืืืื ืืืืืจื ืืืืฃ ืึธืคึผืฉืคึผืืืืื ื, ืึธืืขืจ ืขืก ืืขื ืขื ืืืืฉืึทืืืึทืื ืงืืื ืคึฟืจืืื ืืืขืื ืืืืขืจ ืคืึธืจืฉืืขืืื ื. ื ืืื, ื ืืฉื ืืืืึทื ืื ืืงืืื ืคืื ืืืคึผืขื ืืึทื ืกืื ืืื ืึทืืกืืจืึทืงืฆืืข ืคืื โโืคืื ืืจืืืกื ืืืง ืืืืืืขื ืงืึธื ืืขืงืกื ืืึธืืขืืก ืืขื ืขื ืึทืืื ื ืืืืืง ืึทื ืืืจ ืืึธืื ืฆื ืงืจืื ืคืึธืจืฉืืขืืื ื ืืื ืงืืื ืคืึทื. ืึทืืฅ ืืื ืกืืืคึผืืขืจ - ืขืก ืืึทืงืข ืืื ื ืืฉื ืืืืจืงื ืคืึธืจืฉืืขืืื ื ืคืื.
ืืขืจ ืคืึทืงื ืืื ืึทื ืื ืืขืจืกื ืคึผืจืึธืกื ืคืจืึทืืขืืืึธืจืงืก ืืืึธืก ืืขื ืขื ืืืืืจื ืืืืฃ ืึธืคึผืฉืคึผืืืืื ื ืืขืื ืึธืืึธืืืข ื ืืฆื ืึทืืข ืกืึธืจืฅ ืคืื ืืจืืงืก ืฆื ืึทืจืืขืื ืืื ืขืก ืืขืจ ืึธืคึผืืืืึทืืื. ืืืืฉืึทืืืึทืื ืืึธืก ืืื ืึท ืงืึทืฉ. ืืืคึผืืงืึทืืื, ืืึธืก ืืขื ืขื ืขืงืกืคึผืจืขืกืกืืึธื ืก ืืื ืืขืืึทืืืืฅ ืฆืื ืืืคืืขืฉืืขืื ืคืื ืื ืืืืกืืจืืง ืืืื. ืืขืจ ืืขืืืืงืขืจ ืึทืืืึธืืึทืคึผืคึผืขืจ ืืืื ืึท ืงืึทืืคึผืขืืืืืื ืืืขืจืืขืจืืื ืืืึธืก ืฉืืืขืืขืืขื ืืืืคึผืก ืืื ืคืึทื ืืงืฉืึทื ื ืืืึธืก ืงืขื ืขื ืืืึทืื ืืืื ืขืจ ืืื ืื ืืขืจื ืึธื ืคืึทื ืึธืคึผืฉืคึผืืืืื ื.
ืืื ืืื ืืึธืก ืืขืจืืจืืืื? ืืกืขื ืฉืึทืื, ืืึธืก ืืื ื ืื ืึทื ืืขืจืฉ ืคืื ืื ืืึธืืืง ืืืึธืก ืื ืคึผืืึทืืคืึธืจืืข ืืื ื ืืฆื ืฆื ืืืฉืขื ืขืจืืื JIT ืงืึธื. ืืืขื ืึท ืืขืืึธื ืืื ืืขืจืืคึฟื ืคึฟืึทืจ ืื ืขืจืฉืืขืจ ืืึธื, ืขืก ืืื ืงืึทืืคึผืืืื (ืืื, ืืึธ, ืืขืจ ืคึผืจืึธืฆืขืก ืืื ื ืืฉื ืฉื ืขื); ืืืืฃ ืกืึทืืกืึทืงืืืึทื ื ืจืืคื, ืงืึธื ืืจืึธื ืืื ืืจืึทื ืกืคืขืจื ืฆื ืื ืฉืืื ืงืึทืืคึผืืืื ืืืคึฟื, ืืื ืขืก ืืืขื ืืืื ืงืืื ืืึทืืืืืืง ืคืึธืจืฉืืขืืื ื ืืจืึทืืืืึทืื ื.
ืืื ืืื ืืืขืจ ืคืึทื, ืืืจ ืงืขื ื ืืืื ื ืืฆื JIT ืืึทืืืื ื ืืื ืืขืจื ืึธื ื ืืฆื ืื ืงืึทืืคึผืืืื ื ืึทืืืจ ืืื ืืขืจ ืืขืืืืงืขืจ ืคืึธืจืฉืืขืืื ื ืืื ืืืื AOT ืงืึทืื ืขืจืคึผืึทืจืฅ. ืืืืกืืจืืงื ืืืขืื ืงืืืขื ืฆื ืืื ืืืขืจ ืืืืฃ ืืื ืืขื ืคืึทื.
ืืขืจ ืคึผืจืื ืฆืืคึผ ืืื ืงืฉืื ืงืขื ืขื ืืืื ืคืืจืืืืืจื ืืขืงืืฆืขืจ ืืื ืืืื:
ืืืจ ืืึธื ืงืึทืฉ ืื ืืขืฆื ืจืขืืืืืึทื ืคืื ืึธืคึผืฉืคึผืืืืื ื ืืื ืึท ืืขืืขืืึทื ืืื ืื ืงืึทืืคึผืืืื ืคืื ืงืฆืืข. ืขืก ืืืื ืืืื ืืื ืขื ืฆื ืงืึทืฉ ืึทืืข ื ืืืืืง ืึทืืืืฉืขืงืฅ ืืื ืืืคึผ ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ืื ืคืขืืืขืจ ืคืื ืืืื ืืืคึผ, ืืขืจ ืึทืจืืขืืขืจ, ืืืึธืก ืืขื ืขื ืกืืึธืจื ืึทืจืืืก ืื ืึทืืืืฉืขืงืฅ.
ืขืก ืืื ืึท ืืึธืืืง ืืื ืืขื. ืกืืืื ืืขืจืฆืืืื ืืื ืื ืึทื ืืืื ืขืคึผืขืก ืงืขื ืขื ืืืื ืงืึทืืคึผืืืื ืืื ืงืึทืฉื, ืขืก ืืึธื ืืืื ืืขืืื.
ืงืืง ืคืึธืจืืืก, ืขืก ืืึธื ืืืื ืืขืืึธืื ืึทื ืืขืจ ืงืึทืฉ ืืื ืืจืืขืื ืืื ืึธืคึผืฉืคึผืืืืื ื ืืื ืืืึทื ืึทืืืืึทื ืืืืืฉืื, ืึทืคึฟืืื ืืืื ืืืจ ืืึธื ื ืื ื ืืฆื ืื ืคืืจืืขืืืืื ืืืคึฟื ืคืื ืงืึทืืคึผืืืืื ื ืืืืกืืจืืงื. ืึทืงืืืึทืืื, ืืึธ ืืื ื ืึธืจ ืจืืคึผืืืื ื ืื ืืขืืื ืคืื ืืขื ืืืืจ ืคืื ืืขื ืึทืจืืืงื ืฆื ืืืึธืก ืืื ืึธืคึผืฉืืงื ืืืืื.
ืืืฆื ืืืขืื ืืขื ืงืึธื. ืืืืืจ ืงืืงื ืืืืฃ ื ืืืืฉืคืื ืืืืก ืืื ืืืืืจื ืืืืฃ ืืืื ืคืจืืฉืข ืืืืืืื ืืืืก ืืื ืืื ืืขืืืื ืืจืขืคื ืืื ืื ืขืจื ืกืืข ืคืจืืืืงืฆืืข ืคืื โโืื ืขืจื ืกืืข ืงืจืขืืื ืืื ืกืืืืืฆืืข. ืึทืืข ืขื ืืืืื ืืขื ืขื ืคืืงืืืฉ ืึทืืื ืึทื ืงืืื ืืืื ืขืจ ืืืึธืื ืืจืขืคื.
ืขืก ืืื ืขืืืขืืข ืขืกืึทื ืก. ืืื ืขืก ืืืื ืงืึธื ืืึทืงื. ืขืก ืืขื ืขื ืืืชืืืช ืืื ืึท ื ืึธืจืืึทืืืืื ืืืฃ, ืคึฟืื ืืืึธืก ืื ืคึผืึทืจืกืขืจ ืืื ืืืืจืึทืืึธืจ ืืึทืื ืื ืืขืืืข ืงืึธื ืืึทืงืื. ื ืืจืืื ืืื ืื ืืขืงืืืขื, ืืืจ ืืืืขื ืขื ืขืก, ืคึผืึทืจืกืขื ืขืก ืืื ืฉืืืกื-ืืืขืจื ืคึผืขืจื, ืืืฉืืคื ืึท ืงืึธื ืืึทืงื ืืื ืืขืจืืืขืืืขื ืขืก ืืื ืื ืืึทืืึทืืืืก.
ืขืก ืืื ืขืืขืืขื ืืึทืจ. ืืื ืก ืืึธืื ืึท ืงืึธื ืืึทืงื ืืื ืื ืคึผืจืึธืคึผืขืจืืืขืก ืืึทื ืฅ ื ืึธืืขื, ืขืืืขืจ ืืื ืงืึธื ืืึทืงื ืืขืืขืคืึธื. ืื ืืึทืื ืืขื ืขื ืืจืึทื ืกืืืืืขื ืืื ืื ืืจืืื. ืื ืืขืฉืขืคื ืืืื ืืืื ืฉืืืฆื ืฆื ืงืขื ืขื ืืขืฉืืืื ื ืืืืื ื ืืึท ืฉืืืกืืขื ืคึฟืึทืจ ืืึทืคึผืื ื ืขื ืืืื ืคึผืจืึธืคึผืขืจืืืขืก ืืื ืคึผืขืจื ืืื ืื ืืืฃ ืคืื ืื ืืจืืื. ืืืื ืขืืขืฆืขืจ ืืื ืึท ืืืคึผืึธ ืืื ืืขื ืืืกืืขืจ ืึธืืขืจ ืืืื ืืืจ ืืึทืจืคึฟื ืฆื ืืจืื ืืืขื ืงืึทืืขืจ ืืึทืคึผืื ื ืคืื ืึท ื ืืึทืข ืฉืืืขืฃ ืืืืืขืจ ืื ืืขืืืื ื, ืืื ืึทืืึทืคึผื ืืื ืฆื ืื ื ืืึทืข ืคึฟืึธืจืืึทื. ืืขืจื ืึธื ืืืจ ืงืขื ืขื ืืืืื ืึท ื ืืึทืข ืืึทืคึผืื ื ืงืึธืจืึทืืืืฉืึทื ืืื ืึท ืืืืืง ืืึทืืึทืคืืงืก. ืืึธืก ืืืืกื, ืึท ืืขืื ืก ืืืืฉืคึผืื.
ืืืจ ืื ืกืืจืืืขื ื, ืืึทืื ืืขืกืฅ. ืึทืจืืขื.
ืืื ืืืขื ื ืืฉื ืฆืืฉืืขืื ืื ืงืึธื: ืขืก ืืขื ืขื ืคืืืข ืงืืืืื, ืืื ืืื ืืขื ืขื ืืืจืขืืืืื ืืืืฃ GitHub ืืืจื ืื ืืื ืง ืืื ืื ืกืืฃ ืคืื ืืขื ืึทืจืืืงื. ืืืจ ืงืขื ืขื ืืึธืื ืืื, ืคึผืืึทื ืืงื ืืื ืืืืึทืืขืจ ืคืื ืืขืจืงืขื ืื ื ืืื ืืขืกืื ืืื, ืืื ืขืก ืืืึธืื ืืืืจืงื ืืื ืืืื ืคืึทื. ืืื ืืืขื ื ืึธืจ ืืขืื ืื ืงืึธื ืคืื ืฆืืืื ืืืกืืขืจ ืืขืืืึธืืก ืืืึธืก ืืืกืืืืื ืื ืืืืจืึทืืึธืจ, ืืืึธืก ืืื ืืขืืืขื ืืขืืืื ื ืฆื ืืืื ืฉื ืขื, ืคืื ืื ืืืืืจืึทืืึธืจ, ืืืึธืก ืืื ืืขืืืขื ืืขืืืื ื ืฆื ืืืื ืคึผืึทืืขืืขื.
ืื ืืึธืืืง ืืื ืืื ืืืื: ืืขืจ ืืืกืืขืจ ืืืคึฟื ื ืขืื ืคึผืขืจื ืืืฉืขื ืขืจืืืืึทื ืืืจื ืื ืืงืขืจืืืง ืคึผืึทืจืกืขืจ ืืึธืืืง. ืื LINQ ืฉืืืืข ืืื ืืขืจ ืคึผืึทืจืกืขืจ ืืื ืื ืืงืขืจืืืง ืืึธืืืง ืคืื ืื ืืืืืจืึทืืึธืจ, ืืืึธืก ืืืื ืึท ืืงืฉื ืฆื ืื ืืึทืืึทืืืืก ืงืึธื ืืขืงืกื ืืื ืงืึทืืคึผืขืจื ืฉืืืกืืขื ืืื ืคึผืขืจื ืคืื ืื ืคึผืึทืจืกืขืจ (ืคึฟืึทืจ ืื ืคืึทื ืืงืฉืึทื ื ืขืก ืืื ืงืึธื ืึธื LINQ ืคึฟืึทืจ ืคืึทืจืืืืึทื). ืืขืจื ืึธื, ืื ืคึผืขืจื ืืขื ืขื ืืืจืืืขืืื ืืขื ืฆื ืื ืืืืคึผื ืืืืืจืืืฉืึทื ืืืคึฟื ืืื ืื ืืืึทืืืขืก ืคืื ืื ืคึผืขืจื ืืขื ืขื ืืึทืฉืืืื ืฆื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืคึผืจืึธืคึผืขืจืืืขืก ืคืื ืื ืขื ืืืื.
"ืฉื ืขื" (ืคึผืจืขืคืืงืก ืคืึทืกื ืืื ืืขื ืืฉืืึทืจืงืก):
protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
{
var contact = new Contact();
foreach (var setterMapItem in _proprtySettersMap)
{
var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
setterMapItem.Value(contact, correlation?.Value);
}
return contact;
}
ืืื ืืืจ ืงืขื ืขื ืืขื, ืึท ืกืืึทืืืง ืืึทืืืื ื ืืื ืกืขืืขืจ ืคึผืจืึธืคึผืขืจืืืขืก ืืื ืืขื ืืฆื - ืงืึทืืคึผืืืื ืืึทืืืืึทืก ืืืึธืก ืจืืคื ืื ืกืขืืขืจ ืขื ืืืื. ืืืฉืืคื ืืืจื ืื ืคืืืืขื ืืข ืงืึธื:
static FastContactHydrator()
{
var type = typeof(Contact);
foreach (var property in type.GetProperties())
{
_proprtySettersMap[property.Name] = GetSetterAction(property);
}
}
private static Action<Contact, string> GetSetterAction(PropertyInfo property)
{
var setterInfo = property.GetSetMethod();
var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
var paramEntity = Expression.Parameter(typeof(Contact), "entity");
var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
var lambda = (Expression<Action<Contact, string>>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);
return lambda.Compile();
}
ืืื ืึทืืืขืืืื, ืขืก ืืื ืงืืึธืจ. ืืืจ ืืืจืืคืึธืจ ืื ืคึผืจืึธืคึผืขืจืืืขืก, ืฉืึทืคึฟื ืืขืืึทืืืืฅ ืคึฟืึทืจ ืืื ืืืึธืก ืจืืคื ืกืขืืขืจืก, ืืื ืจืึทืืขืืืขื ืืื. ืืขืืึธืื ืืืจ ืจืืคื ืืืขื ื ืืืืืง.
"ืคึผืึทืืขืืขื" (ืคึผืจืขืคืืงืก ืคึผืึทืืขืืขื ืืื ืืขื ืืฉืืึทืจืงืก):
protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
{
var contact = new Contact();
foreach (var property in _properties)
{
var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
if (correlation?.Value == null)
continue;
property.SetValue(contact, correlation.Value);
}
return contact;
}
ืืึธ ืืืจ ืืื ืืืืคึผืึทืก ืื ืคึผืจืึธืคึผืขืจืืืขืก ืืื ืจืืคื SetValue ืืืืึทื.
ืคึฟืึทืจ ืงืืขืจืืื ืืื ืืื ืึท ืจืขืคึฟืขืจืขื ืฅ, ืืื ืืืคึผืืึทืืขื ืึทื ืึท ื ืึทืืื ืืืคึฟื ืืืึธืก ืฉืจืืืื ืื ืืืึทืืืขืก ืคืื ืืืืขืจ ืงืึธืจืึทืืืืฉืึทื ืคึผืขืจื ืืืืึทื ืืื ืื ืขื ืืืื ืคืขืืืขืจ. ืคึผืจืขืคืืงืก - ืืึทื ืืึทื.
ืืืฆื ืืึธืื ืืื ืื ื ืขืืขื BenchmarkDotNet ืืื ืื ืืขืจืืืื ืื ืคืึธืจืฉืืขืืื ื. ืืื ืคึผืืืฆืืื ื... (ืกืคึผืืืืขืจ - ืืึธืก ืืื ื ืืฉื ืื ืจืืืืืง ืจืขืืืืืึทื, ืคึผืจืืื ืืขื ืขื ืืื ืื)
ืืืึธืก ืืึธื ืืืจ ืืขื ืืึธ? ืืขืืืึธืืก ืืืึธืก ืืจืืืืคืึทื ืืื ืืจืึธืื ืื ืคืึทืกื ืคึผืจืขืคืืงืก ืืขื ืขื ืกืืึธืืขืจ ืืื ืึผืืขื ืึทืืข ืคึผืึทืกืื ืืื ืืขืืืึธืืก ืืื ืื ืกืืึธื ืคึผืจืขืคืืงืก. ืืึธืก ืืื ืืืช ืคึฟืึทืจ ืืืืืข ืึทืืึทืงืืืฉืึทื ืืื ืืืืงืืึทื ืคืื ืึทืจืืขื. ืืืืฃ ืื ืื ืืขืจืข ืืึทื ื, ืึท ืฉืืื ืืื ืขืืขืืึทื ื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืึทืคึผืื ื ื ืืฆื LINQ ืืขืืืึธืืก ืืืขื ืคึฟืึทืจ ืืขื ืืื ื ืึธืจ ืืขืืืขื, ืืืืฃ ืื ืคืึทืจืงืขืจื, ืืืืขืจ ืจืึทืืืกืึทื ืคึผืจืึธืืืึทืงืืืืืืื. ืืขืจ ืืืืืง ืืื ืคืื ืกืืจ. ืืขืจ ืืึทื ื ืืื ื ืืฉื ืืืืฉื ืืื ืคืึทืจืฉืืืขื ืข ื ืืืขืจื ืคืื ืคึผืึทืกืื. ืืขืจ ืืืืื ืืืืืง ืืื ืืื ืืืึธื. ืืื LINQ ืขืก ืืื 4-200 ืืื ืกืืึธืืขืจ, ืขืก ืืื ืืขืจ ืืืกื ืืืืฃ ืืขืขืจืขื ืืขืจ ืืขืืืืงืขืจ ืืืึธื.
UPDATED
ืืื ืืึธื ื ืื ืืขืืืืืื ืืืื ืืืืื, ืึธืืขืจ ืืขืจ ืืืคึผืึธืจืืึทื ืืื, ืืื ืืืขืจ ืงืึธืืขืืข ืืื ื ืื ืืืืืื ืืืื ืืืืื ืึธืืขืจ ืืืื ืงืึธื -
ืืึธ ืืื ืืขืจ ืจืขืืืืืึทื ืคืื ืื ืจืืืขืกื:
ืืกืงื ื: ืืืขื ืืืจ ื ืืฆื ืึธืคึผืฉืคึผืืืืื ื ืืื ืึท ืคืึทืจื ืขืืื ื, ืขืก ืืื ืงืืื ืืึทืืื ืืขืจ ื ืืื ืฆื ืจืืืึธืจื ืฆื ืืจืืงืก - LINQ ืืืขื ืคืึทืจืืจืขืกืขืจื ืคึผืจืึธืืืึทืงืืืืืืื ืืขืจ. ืึธืืขืจ, ืืื ืืืื-ืืึทืกืข ืืขืืืึธืืก ืืืึธืก ืืึทืจืคื ืึทืคึผืืึทืืึทืืืืฉืึทื, ืืืจ ืงืขื ืขื ืจืึทืืขืืืขื ืึธืคึผืฉืคึผืืืืื ื ืืื ืื ืคืึธืจืขื ืคืื ืื ืืืืึทืืืืืขืจื ืืื ืืขืืขืืึทื ืงืึธืืคึผืืืขืจืก, ืืืึธืก ืืืขื ืฆืืฉืืขืื "ืฉื ืขื" ืืึธืืืง. ืืขื ืืืขื ืืืจ ืงืขื ืขื ืืึทืืื ืืืืืข ืื ืืืืืืงืืื ืคืื ืึธืคึผืฉืคึผืืืืื ื ืืื ืื ืืืืงืืึทื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื.
ืื ืืขื ืืฉืืึทืจืง ืงืึธื ืืื ืื ืืืฆื ืืึธ. ืืืขืจ ืขืก ืื ืงืขื ืขื ืืึธืคึผื ืืฉืขืง ืืืื ืืืขืจืืขืจ:
ืคึผืก: ืืขืจ ืงืึธื ืืื ืื ืืขืกืฅ ื ืืฆื IoC, ืืื ืืื ืื ืืขื ืืฉืืึทืจืงืก ืขืก ื ืืฆื ืึท ืืงืกืคึผืืืกืึทื ืงืึทื ืกืืจืึทืงื. ืืขืจ ืคืึทืงื ืืื ืึทื ืืื ืื ืืขืฆื ืืืคึผืืึทืืขื ืืืืฉืึทื ืืื ืฉื ืืึทืื ืึทืืืขืง ืึทืืข ืกืืืืช ืืืึธืก ืงืขื ืืืืจืงื ืคืึธืจืฉืืขืืื ื ืืื ืืึทืื ืื ืจืขืืืืืึทื ืืืืืืืง.
PPS: ืืึทื ืง ืฆื ืื ืืึทื ืืฆืขืจ
PPPS: ืืึทื ืง ืฆื ืื ืืึทืืืงืืึทืืึทืก ืืืืขื ืขืจ ืืืึธืก ืืึทื ืฆื ืื ืื ืึธ ืคืื ืื ื ืืกื ืืื ืคึผืืึทื. ืืื ืืื ืคึฟืึทืจ ืืื ืึทืคืึธืจืืึทืื ืืื ืงืึทื ืืืื ืืึทื ืก. ืื ืืืคึผืืึธืืืึทืกื ืคืื ืืขืจ ืคึผืจืขืืขื ืืืจืื ื ืืึธืื ืคืื ืฆื ืืืื ืืขืืืืื, ืึธืืขืจ ืืื ืืขื ืืืขื ืื ืงืจืืืืง ืืื ืืฉืืื. ืืื ืืขื ืคึฟืึทืจ ืื ืคึผืจืึทืืืฉืขืงืืึทื.
ืืงืืจ: www.habr.com