2010-09-01 9 views
10

का उपयोग कर ऑटोमैपर निर्भरता इंजेक्शन इंजेक्शन का उपयोग करके मुझे एएसपी.नेट एमवीसी 2 एप्लिकेशन में ऑटोमैपर इंजेक्शन देने में समस्या हो रही है। मैंने जिमी बोगर्ड की पोस्ट को AutoMapper and StructureMap type Configuration पर एक गाइड के रूप में इस्तेमाल किया।निनजेक

public class AutoMapperModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<ITypeMapFactory>().To<TypeMapFactory>(); 
     Bind<Configuration>().ToSelf().InSingletonScope().WithConstructorArgument("mapper", MapperRegistry.AllMappers); 
     Bind<IConfiguration>().To<Configuration>(); 
     Bind<IConfigurationProvider>().To<Configuration>(); 
     Bind<IMappingEngine>().To<MappingEngine>(); 
    } 
} 

निनजेक्ट Configuration को हल करते समय अपवाद फेंकता है।

IObjectMapper सक्रिय करने में त्रुटि कोई मिलान बाइंडिंग उपलब्ध नहीं है, और प्रकार स्वयं-बाध्यकारी नहीं है। सक्रियण पथ:
3) प्रकार विन्यास के निर्माता के पैरामीटर मानचित्रकारों में निर्भरता IObjectMapper इंजेक्शन

अद्यतन

यह अब निम्नलिखित बंधन का उपयोग कर काम कर रहा है:

Bind<ITypeMapFactory>().To<TypeMapFactory>(); 
    Bind<Configuration>().ToConstant(new Configuration(Kernel.Get<ITypeMapFactory>(), MapperRegistry.AllMappers())).InSingletonScope(); 
    Bind<IConfiguration>().ToMethod(c => c.Kernel.Get<Configuration>()); 
    Bind<IConfigurationProvider>().ToMethod(c => c.Kernel.Get<Configuration>()); 
    Bind<IMappingEngine>().To<MappingEngine>(); 

मैं गिटहब पर मॉड्यूल प्रकाशित किया। AutoMapper.Ninject। मेरे ब्लॉग पर अधिक जानकारी: http://binaryspeakeasy.com/2010/09/automapper-ninject/

+0

यह भी देखें कि http://stackoverflow.com/a/1810728/11635 –

उत्तर

1

मुझे यह काम मिल गया लेकिन यह कॉन्फ़िगरेशन क्लास का एक उदाहरण बनाने में बहुत साफ महसूस नहीं करता है। आगे इसे साफ करने के लिए कोई सुझाव।

 Bind<ITypeMapFactory>().To<TypeMapFactory>(); 
     Bind<Configuration>().ToConstant(new Configuration(Kernel.Get<ITypeMapFactory>(), MapperRegistry.AllMappers())).InSingletonScope(); 
     Bind<IConfiguration>().ToMethod(c => c.Kernel.Get<Configuration>()); 
     Bind<IConfigurationProvider>().ToMethod(c => c.Kernel.Get<Configuration>()); 
     Bind<IMappingEngine>().To<MappingEngine>(); 
+1

इसे अपने प्रश्न में संपादित करने के लिए सबसे अच्छा है। सामान्य तौर पर मैं कहना चाहता हूँ आप 'overusing रहे बाइंड () .ToMethod (ग => c.Kernel.Get ()'। बस का उपयोग 'बाइंड () करें.अभियान ()' –

+1

डिट्टो 'बाइंड <विन्यास >()। ToConstant (नया कॉन्फ़िगरेशन (कर्नेल.गेट (), MapperRegistry.AllMappers()))। InSingletonScope(); 'को मानचित्र करना चाहिए'। <<।> कन्स्ट्रक्टर आर्ग्यूमेंट के साथ .... –

2

मैपिंग मुखौटा पेश करना भी एक अच्छा विचार हो सकता है। अपने कोड के माध्यम से IMappingEngine को पास करने के बजाय IObjectMapper इंटरफ़ेस बनाएं। मेरे द्वारा उपयोग किए जाने वाले इंटरफ़ेस में ऑटोमैपर्स कोड से सीधे लिया गया विधि हस्ताक्षर शामिल है।

public interface IObjectMapper 
{ 
    TDestination Map(TSource source); 
    TDestination Map(TSource source, TDestination destination); 
    object Map(object source, Type sourceType, Type destinationType); 
    object Map(object source, object destination, Type sourceType, Type destinationType); 
} 

आपका विन्यास अभी भी automapper निर्भर होने जा रहा है।

एक ब्लॉग पोस्ट मैं इस पर लिखा है यहाँ है: http://fodonnel.wordpress.com/2010/09/20/an-object-mapper-facade/

+0

ब्लॉग लिंक मारा हुआ। – mlhDev

11

आप इस एक एक नवीनतम संस्करण (वर्तमान में 2.2.0) का उपयोग लाइनर है कर सकते हैं।

एक अतिरिक्त के रूप में, मैं fodonnel से सहमत हैं, एक मुखौटा छिपाने के लिए Automapper इंटरफ़ेस एक अच्छा विचार है जोड़ने, फिर भी मैं नहीं हस्ताक्षर सीधे Automapper से, जब तक आप सभी कि कार्यक्षमता की जरूरत ले जाएगा।

संबंधित मुद्दे