मैं अपने वर्गों में आईएलओजी इंजेक्ट करना चाहता हूं, न कि ILoggerFactoryAdapter, लेकिन ILoggerFactoryAdapter को कॉलिंग क्लास (कक्षा जो कुछ लॉग करना चाहता है, के नाम की आवश्यकता है, इसलिए मुझे ठीक से वर्गीकृत किया जा सकता है) ताकि ऑटोफैक किसी भी तरह कक्षा की पहचान कर सके आईएलओजी का अनुरोध कर रहे हैं और कारखाने से स्वचालित रूप से आईएलओजी बना रहे हैं?आम। लॉजिंग और ऑटोफैक के साथ स्वचालित कारखाना?
उत्तर
बेली लिंग एक महान दृष्टिकोण है कि ढेर चलने का उपयोग नहीं करता के साथ आया था - पोस्ट यहाँ देखें: http://groups.google.com/group/autofac/msg/704f926779cbe8b3
मैंने यह भी करने की कोशिश की है, लेकिन मुझे लॉगर इंस्टेंस के साथ इंजेक्शन देने वाले प्रकार को प्राप्त करने के लिए ऑटोफैक (इसे पैच किए बिना) के सक्रियण स्टैक तक पहुंच प्राप्त करने का कोई तरीका नहीं मिला।
नीचे "मेरे मशीन पर काम करता है" प्रमाणित तरीका है (Autofac-1.4.3.536)
protected override void Load(ContainerBuilder builder)
{
const string loggerName = "Logger.Name";
builder.
Register((c, p) => LogManager.GetLogger(p.Named<string>(loggerName))).
OnPreparing((c, p) =>
{
var stack = p.Context.GetActivationStack();
var requestingType = "default";
if (stack != null && stack.Length > 1) requestingType = stack[1].Description;
var parameters = new List<Parameter>(p.Parameters) { new NamedParameter(loggerName, requestingType) };
p.Parameters = parameters;
}).
FactoryScoped();
}
static class ContextExtensions
{
public static Autofac.Service[] GetActivationStack(this Autofac.IContext context)
{
const string notSupportedMessage = "GetActivationStack not supported for this context.";
var type = context.GetType();
if (type.FullName != "Autofac.Context") throw new NotSupportedException(notSupportedMessage);
var field = type.GetField("_componentResolutionStack", BindingFlags.Instance | BindingFlags.NonPublic);
if (field == null) throw new NotSupportedException(notSupportedMessage);
var activationStack = field.GetValue(context) as Stack<Autofac.Service>;
if (activationStack == null) throw new NotSupportedException(notSupportedMessage);
return activationStack.ToArray();
}
}
वाह, धन्यवाद, तुरंत इसे आजमाएगा! –
आकर्षण की तरह काम करता है! धन्यवाद! –
- 1. ऑटोफैक और क्वार्ट्ज.Net एकीकरण
- 2. ऑटोफैक स्वचालित स्व-बाध्यकारी कर सकता है?
- 3. ऑटोफैक और डैपर
- 4. ऑटोफैक
- 5. ऑटोफैक
- 6. ऑटोफैक
- 7. ऑटोफैक
- 8. ऑटोफैक
- 9. ऑटोफैक और क्रॉस-ऐपडोमेन प्रॉक्सी
- 10. आंतरिक बनाम बाहरी कारखाना
- 11. ऑटोफैक: पैरेंट
- 12. ऑटोफैक लाइफटाइम और एक डिफ़ॉल्ट लाइफटाइम स्कोप
- 13. आईओसी के शीर्ष पर सार कारखाना पैटर्न?
- 14. एएसपी.नेट (एमवीसी) के भीतर ऑटोफैक के साथ एनएचबर्ननेट: आईट्रांसक्शन
- 15. अद्यतन ऑटोफैक
- 16. Haml: Indenting अगर आम सामग्री के साथ/किसी और बयान
- 17. Hunchentoot के साथ Heroku पर आम लिस्प?
- 18. ऑटोफैक पैरामीटर रहित कन्स्ट्रक्टर चयन
- 19. विंडोज़ सेवा (ऑटोफैक)
- 20. पीएक्स उपयोगकर्ता: आम तौर पर पेक्स और स्वचालित अन्वेषण परीक्षण के आपके इंप्रेशन क्या हैं?
- 21. ANTLR और परहेज आम गलतियों
- 22. ऑटोफैक लाइफटाइम प्रबंधन
- 23. डुप्लिकेट वर्गों और आम-beanutils
- 24. क्या वसंत ढांचे में ऐप्लिकेशन संदर्भ और सेम कारखाना है
- 25. ऑटोफैक 2.1.10 आरसी
- 26. एएसपी.नेट एमवीसी 3, रावेनडीबी, और ऑटोफैक इश्यु प्लस 2 अन्य ऑटोफैक प्रश्न
- 27. ऑटोफैक कॉन्फ़िगरेशन सत्यापन
- 28. उदाहरण हल करें - ऑटोफैक
- 29. पायथन के साथ स्वचालित फ़ायरफ़ॉक्स?
- 30. आदेश: आम, साझा, और सर्वर
बेली का समाधान बहुत अच्छा है, लेकिन यह वेबफॉर्म एकीकरण के साथ काम नहीं करता है। पेज और उपयोगकर्ता नियंत्रण पंजीकृत नहीं हैं, इसलिए ईवेंट हैंडलर कभी आग नहीं लगाता है। Autofac प्रोजेक्ट साइट की विकी पर एक ही प्रभाव (http://code.google.com/p/autofac/wiki/Log4NetIntegration) पर एक टिप्पणी है। –
कोड थोड़ा पुराना है, लेकिन सौभाग्य से ऑटोफैक ने इसे औपचारिक उदाहरण में अनुकूलित किया: http://docs.autofac.org/en/latest/examples/log4net.html – Mugen