AutoMapper.CreateMaps কোথায় রাখবেন?


216

আমি AutoMapperএকটি ASP.NET MVCঅ্যাপ্লিকেশন ব্যবহার করছি । আমাকে বলা হয়েছিল যে আমার AutoMapper.CreateMapওভারহেড অনেক বেশি থাকায় আমার অন্যত্র চলে যেতে হবে । এই কলগুলি মাত্র 1 স্থানে রাখার জন্য কীভাবে আমার অ্যাপ্লিকেশনটি ডিজাইন করবেন তা আমি নিশ্চিত নই।

আমার একটি ওয়েব স্তর, পরিষেবা স্তর এবং একটি ডেটা স্তর রয়েছে। প্রতিটি তার নিজস্ব একটি প্রকল্প। আমি Ninjectসমস্ত কিছু ডিআই ব্যবহার করি। আমি AutoMapperউভয় ওয়েব এবং পরিষেবা স্তরগুলিতে ব্যবহার করব ।

তাহলে AutoMapperক্রিয়েটম্যাপের জন্য আপনার সেটআপ কী ? কোথায় রেখেছ? এটাকে কীভাবে ডাকবেন?

উত্তর:


219

যতক্ষণ না এটি একটি স্ট্যাটিক বর্গ, কোনও ব্যাপার নয়। এটা সব কনভেনশন সম্পর্কে ।

আমাদের সম্মেলনটি হ'ল প্রতিটি "স্তর" (ওয়েব, পরিষেবাদি, ডেটা) এর একটি একক ফাইল রয়েছে , যেখানে AutoMapperXConfiguration.csএকক পদ্ধতি বলা হয় Configure(), যেখানে Xস্তরটি রয়েছে।

Configure()পদ্ধতি তারপর কল privateপ্রতিটি এলাকার জন্য পদ্ধতি।

আমাদের ওয়েব স্তরের কনফিগারেশনের একটি উদাহরণ এখানে রয়েছে:

public static class AutoMapperWebConfiguration
{
   public static void Configure()
   {
      ConfigureUserMapping();
      ConfigurePostMapping();
   }

   private static void ConfigureUserMapping()
   {
      Mapper.CreateMap<User,UserViewModel>();
   } 

   // ... etc
}

আমরা প্রতিটি "সমষ্টি" (ব্যবহারকারী, পোস্ট) এর জন্য একটি পদ্ধতি তৈরি করি, যাতে জিনিসগুলি সুন্দরভাবে পৃথক করা হয়।

তারপরে আপনার Global.asax:

AutoMapperWebConfiguration.Configure();
AutoMapperServicesConfiguration.Configure();
AutoMapperDomainConfiguration.Configure();
// etc

এটি "শব্দের ইন্টারফেস" এর মতো - এটি প্রয়োগ করতে পারে না, তবে আপনি এটি প্রত্যাশা করেন, যাতে প্রয়োজনে আপনি কোড (এবং রিফ্যাক্টর) করতে পারেন।

সম্পাদনা করুন:

ভেবেছিলাম আমি উল্লেখ করেছি যে আমি এখন অটোম্যাপার প্রোফাইলগুলি ব্যবহার করি , সুতরাং উপরের উদাহরণটি হয়ে যায়:

public static class AutoMapperWebConfiguration
{
   public static void Configure()
   {
      Mapper.Initialize(cfg =>
      {
        cfg.AddProfile(new UserProfile());
        cfg.AddProfile(new PostProfile());
      });
   }
}

public class UserProfile : Profile
{
    protected override void Configure()
    {
         Mapper.CreateMap<User,UserViewModel>();
    }
}

অনেক বেশি ক্লিনার / আরও শক্তিশালী।


2
@ AliRızaAdıyahşi উভয় প্রকল্পের একটি ম্যাপিং ফাইল থাকা উচিত। কোরটিতে অটোম্যাপারকোর কনফিগারেশন থাকতে হবে এবং ইউআই-এর অটোম্যাপারওয়েব কনফিগারেশন থাকতে হবে। ওয়েব কনফিগারেশনের মূল কনফিগারেশন থেকে প্রোফাইলগুলি যুক্ত করা উচিত।
আরপিএম 1984

7
Mapper.Initializeপ্রতিটি কনফিগারেশন ক্লাসে কল করা কি পূর্ববর্তী প্রোফাইলগুলি ওভাররাইট করে? যদি তা হয় তবে আরম্ভের পরিবর্তে কী ব্যবহার করা উচিত?
কোডি

4
এটি কি আপনার ওয়েব এপিআই প্রকল্পের আপনার পরিষেবা এবং ডোমেন স্তরগুলির জন্য কোনও রেফারেন্স তৈরি করে না?
চজত

3
আমার যদি ওয়েব -> পরিষেবা -> বিএলএল -> ডাল থাকে। আমার সত্তা আমার ডালে রয়েছে। আমি ওয়েব বা পরিষেবা উভয় থেকে আমার ডালের রেফারেন্স দিতে চাই না। আমি কীভাবে এটি আরম্ভ করব?
ভাইচে

19
অটোম্যাপার হিসাবে 4.2 Mapper.CreateMap()এখন অপ্রচলিত। 'Mapper.Map<TSource, TDestination>(TSource, TDestination)' is obsolete: 'The static API will be removed in version 5.0. Use a MapperConfiguration instance and store statically as needed. Use CreateMapper to create a mapper instance.'। নতুন প্রয়োজনীয়তার সাথে সঙ্গতি রাখতে আপনি কীভাবে আপনার উদাহরণ আপডেট করবেন?
ʙᴀᴋᴇʀ ʙᴀᴋᴇʀ

34

আপনার ওয়েব প্রকল্পটি যে সমাবেশটি রয়েছে তার উল্লেখ যতক্ষণ আপনি এটি এটিকে যেকোন স্থানে রাখতে পারেন your আপনার অবস্থাতে আমি এটি পরিষেবা স্তরে রেখে দেব কারণ এটি ওয়েব স্তর এবং পরিষেবা স্তর দ্বারা অ্যাক্সেসযোগ্য হবে এবং পরে যদি আপনি সিদ্ধান্ত নেন তবে কোনও কনসোল অ্যাপ্লিকেশন করুন বা আপনি কোনও ইউনিট পরীক্ষা প্রকল্প করছেন ম্যাপিং কনফিগারেশনটি সেই প্রকল্পগুলি থেকে পাওয়া যাবে।

আপনার Global.asax এ আপনি সেই পদ্ধতিতে কল করবেন যা আপনার সমস্ত মানচিত্র নির্ধারণ করে। নিচে দেখ:

ফাইল অটোম্যাপারবুটসট্রেপার। সি

public static class AutoMapperBootStrapper
{
     public static void BootStrap()
     {  
         AutoMapper.CreateMap<Object1, Object2>();
         // So on...


     }
}

অ্যাপ্লিকেশন শুরুতে গ্লোবাল.এক্স্যাক্স

শুধু কল

AutoMapperBootStrapper.BootStrap();

এখন কিছু লোক এই পদ্ধতির বিরুদ্ধে তর্ক করবে কিছু সলাইড নীতি লঙ্ঘন করে, যার তাদের বৈধ যুক্তি রয়েছে। এখানে তারা পড়ার জন্য।

বুটস্ট্র্যাপারে অটোম্যাপার কনফিগার করা ওপেন-ক্লোজড নীতি লঙ্ঘন করে?


13
এই. যথাযথ "হার্ডকোর" আর্কিটেকচারের প্রতি প্রতিটি পদক্ষেপে দ্রুততর আরও কোড জড়িত বলে মনে হয়। এটা সহজ; এটি সেখানে 99.9% কোডারদের জন্য যথেষ্ট হবে; এবং আপনার সহকর্মীরা সরলতার প্রশংসা করবে। হ্যাঁ, ওপেন-ক্লোজড নীতিটি সম্পর্কে প্রত্যেকেরই সমস্যাটি পড়া উচিত, তবে সবার ট্রেড অফ সম্পর্কেও চিন্তা করা উচিত।
আনন

আপনি অটোম্যাপারবুটস্প্রেটার ক্লাসটি কোথায় তৈরি করেছেন?
ব্যবহারকারী 6395764

16

আপডেট:SelfProfiler অটোম্যাপার ভি 2 হিসাবে অপসারণ করা হয়েছে বলে এখানে পোস্ট করা পদ্ধতির আর বৈধতা নেই ।

আমি থাইয়ের মতো একই পদ্ধতি গ্রহণ করব। তবে আমি SelfProfiler<>মানচিত্রগুলি পরিচালনা করতে অন্তর্নির্মিত শ্রেণিটি ব্যবহার করব, তারপরে Mapper.SelfConfigureআরম্ভ করার জন্য ফাংশনটি ব্যবহার করব ।

উত্স হিসাবে এই অবজেক্টটি ব্যবহার:

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
    public string GetFullName()
    {
        return string.Format("{0} {1}", FirstName, LastName);
    }
}

এবং এগুলি গন্তব্য হিসাবে:

public class UserViewModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class UserWithAgeViewModel
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public int Age { get; set; }
}

আপনি এই প্রোফাইলগুলি তৈরি করতে পারেন:

public class UserViewModelProfile : SelfProfiler<User,UserViewModel>
{
    protected override void DescribeConfiguration(IMappingExpression<User, UserViewModel> map)
    {
    //This maps by convention, so no configuration needed
    }
}

public class UserWithAgeViewModelProfile : SelfProfiler<User, UserWithAgeViewModel>
{
    protected override void DescribeConfiguration(IMappingExpression<User, UserWithAgeViewModel> map)
    {
    //This map needs a little configuration
        map.ForMember(d => d.Age, o => o.MapFrom(s => DateTime.Now.Year - s.BirthDate.Year));
    }
}

আপনার অ্যাপ্লিকেশন শুরু করতে, এই শ্রেণি তৈরি করুন

 public class AutoMapperConfiguration
 {
      public static void Initialize()
      {
          Mapper.Initialize(x=>
          {
              x.SelfConfigure(typeof (UserViewModel).Assembly);
              // add assemblies as necessary
          });
      }
 }

আপনার Global.asax.cs ফাইলটিতে এই লাইনটি যুক্ত করুন: AutoMapperConfiguration.Initialize()

এখন আপনি আপনার ম্যাপিং ক্লাসগুলি রাখতে পারেন যেখানে তারা আপনাকে বোঝায় এবং একটি একক ম্যাপিং ক্লাস সম্পর্কে চিন্তা করবেন না।


3
শুধু এফওয়াইআই, স্বতঃপ্রফেলার ক্লাসটি অটোম্যাপার ভি 2 থেকে চলে গেছে।
ম্যাট হানিক্ট

15

আপনারা যারা নিম্নলিখিত অনুসরণ করেন তাদের জন্য:

  1. একটি আইওসি পাত্রে ব্যবহার
  2. এই জন্য খোলা বন্ধ ভাঙ্গা পছন্দ করবেন না
  3. মনোলিথিক কনফিগারেশন ফাইলটি পছন্দ করবেন না

আমি প্রোফাইলগুলির মধ্যে এবং আমার আইওকে ধারকটি কাজে লাগানোর মধ্যে একটি কম্বো করেছি:

আইওসি কনফিগারেশন:

public class Automapper : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly().BasedOn<Profile>().WithServiceBase());

        container.Register(Component.For<IMappingEngine>().UsingFactoryMethod(k =>
        {
            Profile[] profiles = k.ResolveAll<Profile>();

            Mapper.Initialize(cfg =>
            {
                foreach (var profile in profiles)
                {
                    cfg.AddProfile(profile);
                }
            });

            profiles.ForEach(k.ReleaseComponent);

            return Mapper.Engine;
        }));
    }
}

কনফিগারেশন উদাহরণ:

public class TagStatusViewModelMappings : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<Service.Contracts.TagStatusViewModel, TagStatusViewModel>();
    }
}

ব্যবহারের উদাহরণ:

public class TagStatusController : ApiController
{
    private readonly IFooService _service;
    private readonly IMappingEngine _mapper;

    public TagStatusController(IFooService service, IMappingEngine mapper)
    {
        _service = service;
        _mapper = mapper;
    }

    [Route("")]
    public HttpResponseMessage Get()
    {
        var response = _service.GetTagStatus();

        return Request.CreateResponse(HttpStatusCode.Accepted, _mapper.Map<List<ViewModels.TagStatusViewModel>>(response)); 
    }
}

ট্রেড অফটি হ'ল আপনাকে স্ট্যাটিক ম্যাপারের পরিবর্তে আইএমপিংইঙ্গাইন ইন্টারফেস দ্বারা ম্যাপারটি উল্লেখ করতে হবে, তবে এটি আমি থাকতে পারি একটি কনভেনশন।


14

উপরের সমস্ত সমাধান কল করার জন্য একটি স্থির পদ্ধতি সরবরাহ করে (অ্যাপ_স্টার্ট বা যে কোনও জায়গা থেকে) যেটিকে ম্যাপিং-কনফিগারেশনের অংশগুলি কনফিগার করার জন্য অন্যান্য পদ্ধতিগুলির কল করা উচিত। তবে, আপনার যদি মডিউলার অ্যাপ্লিকেশন থাকে তবে সেই মডিউলগুলি যে কোনও সময় অ্যাপ্লিকেশনটি আউট এবং আউট করতে পারে, এই সমাধানগুলি কাজ করে না। আমি WebActivatorলাইব্রেরি ব্যবহার করার পরামর্শ দিচ্ছি যা চালানোর জন্য কিছু পদ্ধতি নিবন্ধিত করতে পারে app_pre_startএবং যে app_post_startকোনও জায়গায়:

// in MyModule1.dll
public class InitMapInModule1 {
    static void Init() {
        Mapper.CreateMap<User, UserViewModel>();
        // other stuffs
    }
}
[assembly: PreApplicationStartMethod(typeof(InitMapInModule1), "Init")]

// in MyModule2.dll
public class InitMapInModule2 {
    static void Init() {
        Mapper.CreateMap<Blog, BlogViewModel>();
        // other stuffs
    }
}
[assembly: PreApplicationStartMethod(typeof(InitMapInModule2), "Init")]

// in MyModule3.dll
public class InitMapInModule3 {
    static void Init() {
        Mapper.CreateMap<Comment, CommentViewModel>();
        // other stuffs
    }
}
[assembly: PreApplicationStartMethod(typeof(InitMapInModule2), "Init")]

// and in other libraries...

আপনি WebActivatorনিউগেটের মাধ্যমে ইনস্টল করতে পারেন ।


2
আমি সম্প্রতি একই সিদ্ধান্তে এসেছি। এটি আপনার মানচিত্রের তৈরি কোডটিকে গ্রাসকারী কোডের কাছাকাছি রাখে। এই পদ্ধতিটি এমভিসি নিয়ন্ত্রককে অনেক বেশি রক্ষণাবেক্ষণযোগ্য করে তোলে।
mfras3r

আমি এটি যে কোনও জায়গায় কীভাবে শুরু করব, আপনি একটি উদাহরণ দিতে পারেন? আপনার ব্লগ লিঙ্কগুলি কাজ করে না ...
ভায়াচে

1
@ ভাইচে এটা বেশ পরিষ্কার! মধ্যে MyModule1প্রকল্পের (অথবা যাই হোক না কেন আপনার প্রকল্প নাম) শুধু একটি বর্গ নামে তৈরি InitMapInModule1এবং ফাইল ভিতরে কোড করা; অন্যান্য মডিউলগুলির জন্য, একই কাজ করুন।
রেভি অ্যামিরি

গোছা, আমি আসলে এটি চেষ্টা করেছিলাম। আমি নিউগেট থেকে আমার ক্লাস লাইব্রেরিতে (ডএল) ওয়েবএ্যাক্টিভেটর যুক্ত করেছি এবং সেখানে মানচিত্রগুলি কনফিগার এবং আরম্ভ করার জন্য আমি @ RPM1984 বাস্তবায়ন তৈরি করেছি in আমি এর মাধ্যমে প্রোফাইল ব্যবহার করছি না। ধন্যবাদ.
ভাইচে

10

সেরা উত্তরের পাশাপাশি, একটি ভাল উপায় হ'ল কিছু অটোমেশন যুক্ত করতে অটোফ্যাক আইওসি লিবারারি ব্যবহার করা । এটির সাথে আপনি কেবল সূচনা নির্বিশেষে আপনার প্রোফাইলগুলি সংজ্ঞায়িত করুন।

   public static class MapperConfig
    {
        internal static void Configure()
        {

            var myAssembly = Assembly.GetExecutingAssembly();

            var builder = new ContainerBuilder();

            builder.RegisterAssemblyTypes(myAssembly)
                .Where(t => t.IsSubclassOf(typeof(Profile))).As<Profile>();

            var container = builder.Build();

            using (var scope = container.BeginLifetimeScope())
            {
                var profiles = container.Resolve<IEnumerable<Profile>>();

                foreach (var profile in profiles)
                {
                    Mapper.Initialize(cfg =>
                    {
                        cfg.AddProfile(profile);
                    });                    
                }

            }

        }
    }

এবং Application_Startপদ্ধতিতে এই লাইন কল :

MapperConfig.Configure();

উপরের কোডটি সমস্ত প্রোফাইল উপ শ্রেণি সন্ধান করে এবং সেগুলি স্বয়ংক্রিয়ভাবে শুরু করে।


7

1 ম্যাপিংয়ের সমস্ত যুক্তি যুক্ত করা আমার পক্ষে ভাল অনুশীলন নয়। কারণ ম্যাপিং ক্লাসটি অত্যন্ত বড় এবং বজায় রাখা খুব শক্ত হবে।

আমি একই সিএস ফাইলে ভিউমোডেল ক্লাসের সাথে ম্যাপিংয়ের জিনিসগুলি একসাথে রাখার পরামর্শ দিচ্ছি। আপনি এই সম্মেলনটি অনুসরণ করে ম্যাপিং সংজ্ঞাটি সহজেই নেভিগেট করতে পারেন। তদতিরিক্ত, ম্যাপিং ক্লাস তৈরি করার সময়, ভিউমোডেল বৈশিষ্ট্যগুলি একই ফাইলে থাকার কারণে আপনি দ্রুত উল্লেখ করতে পারেন।

সুতরাং আপনার ভিউ মডেল বর্গটি দেখতে পাবেন:

public class UserViewModel
{
    public ObjectId Id { get; set; }

    public string Firstname { get; set; }

    public string Lastname { get; set; }

    public string Email { get; set; }

    public string Password { get; set; }
}

public class UserViewModelMapping : IBootStrapper // Whatever
{
    public void Start()
    {
        Mapper.CreateMap<User, UserViewModel>();
    }
}

9
এটাকে কীভাবে ডাকবেন?
শন ম্লেয়ান

1
আমি ফাইলের বিধি অনুসারে একটি শ্রেণি অনুসরণ করব: stackoverflow.com/q/2434990/1158845
উমাইর


5

স্থির পদ্ধতি ম্যাপার ব্যবহার করে অটোম্যাপারের নতুন সংস্করণ থেকে ম্যাপার (ম্যাপ) অবমূল্যায়ন করা হয়েছে। সুতরাং আপনি এমভিসি অ্যাপ্লিকেশন (Global.asax.cs) এ স্থির সম্পত্তি হিসাবে ম্যাপার কনফিগারেশন যুক্ত করতে পারেন এবং ম্যাপারের উদাহরণ তৈরি করতে এটি ব্যবহার করতে পারেন।

App_Start

public class MapperConfig
{
    public static MapperConfiguration MapperConfiguration()
    {
        return new MapperConfiguration(_ =>
        {
            _.AddProfile(new FileProfile());
            _.AddProfile(new ChartProfile());
        });
    }
}

Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
{
    internal static MapperConfiguration MapperConfiguration { get; private set; }

    protected void Application_Start()
    {
        MapperConfiguration = MapperConfig.MapperConfiguration();
        ...
    }
}

BaseController.cs

    public class BaseController : Controller
    {
        //
        // GET: /Base/
        private IMapper _mapper = null;
        protected IMapper Mapper
        {
            get
            {
                if (_mapper == null) _mapper = MvcApplication.MapperConfiguration.CreateMapper();
                return _mapper;
            }
        }
    }

https://github.com/AutoMapper/AutoMapper/wiki/Migrating-from-static-API


3

যারা ব্যবহার করছেন (হারিয়েছেন):

  • ওয়েবএপিআই 2
  • সিম্পলইনজেক্টর ৩.১
  • অটোম্যাপার ৪.২.১ (প্রোফাইল সহ)

কীভাবে আমি " নতুন উপায়ে " অটোম্যাপারকে সংহত করার ব্যবস্থা করেছি । এছাড়াও, এই উত্তরের জন্য একটি বিশাল ধন্যবাদ (এবং প্রশ্ন)

1 - ওয়েবএপিআই প্রকল্পে একটি ফোল্ডার তৈরি করেছে যার নাম "প্রোফাইল ম্যাপার্স"। এই ফোল্ডারে আমি আমার সমস্ত প্রোফাইল ক্লাস রাখি যা আমার ম্যাপিংগুলি তৈরি করে:

public class EntityToViewModelProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<User, UserViewModel>();
    }

    public override string ProfileName
    {
        get
        {
            return this.GetType().Name;
        }
    }
}

2 - আমার অ্যাপ_স্টার্টে আমার কাছে একটি সিম্পল ইনজেক্টরএপিআইআইনিটিয়ালাইজার রয়েছে যা আমার সিম্পল ইনজেক্টর ধারকটি কনফিগার করে:

public static Container Initialize(HttpConfiguration httpConfig)
{
    var container = new Container();

    container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();

    //Register Installers
    Register(container);

    container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

    //Verify container
    container.Verify();

    //Set SimpleInjector as the Dependency Resolver for the API
    GlobalConfiguration.Configuration.DependencyResolver =
       new SimpleInjectorWebApiDependencyResolver(container);

    httpConfig.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);

    return container;
}

private static void Register(Container container)
{
     container.Register<ISingleton, Singleton>(Lifestyle.Singleton);

    //Get all my Profiles from the assembly (in my case was the webapi)
    var profiles =  from t in typeof(SimpleInjectorApiInitializer).Assembly.GetTypes()
                    where typeof(Profile).IsAssignableFrom(t)
                    select (Profile)Activator.CreateInstance(t);

    //add all profiles found to the MapperConfiguration
    var config = new MapperConfiguration(cfg =>
    {
        foreach (var profile in profiles)
        {
            cfg.AddProfile(profile);
        }
    });

    //Register IMapper instance in the container.
    container.Register<IMapper>(() => config.CreateMapper(container.GetInstance));

    //If you need the config for LinqProjections, inject also the config
    //container.RegisterSingleton<MapperConfiguration>(config);
}

3 - স্টার্টআপ

//Just call the Initialize method on the SimpleInjector class above
var container = SimpleInjectorApiInitializer.Initialize(configuration);

4 - তারপরে, আপনার নিয়ামকটিতে সাধারণত একটি আইএমএপার ইন্টারফেস হিসাবে ইনজেক্ট করুন:

private readonly IMapper mapper;

public AccountController( IMapper mapper)
{
    this.mapper = mapper;
}

//Using..
var userEntity = mapper.Map<UserViewModel, User>(entity);

কিছু স্পেসিফিকেশনে সামান্য টুইট করার সাথে সাথে এই পদ্ধতিটি এমভিসির সাথেও দুর্দান্তভাবে কাজ করে - ধন্যবাদ ছেলে!
নিক কোড

দয়া করে গিথুবে একটি ডেমো উদাহরণ যুক্ত করুন
মোহাম্মদ ডালিরি

3

Vb.net প্রোগ্রামারদের জন্য অটোম্যাপারের নতুন সংস্করণ (5.x) ব্যবহার করে।

Global.asax.vb:

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Protected Sub Application_Start()
        AutoMapperConfiguration.Configure()
    End Sub
End Class

AutoMapperConfiguration:

Imports AutoMapper

Module AutoMapperConfiguration
    Public MapperConfiguration As IMapper
    Public Sub Configure()
        Dim config = New MapperConfiguration(
            Sub(cfg)
                cfg.AddProfile(New UserProfile())
                cfg.AddProfile(New PostProfile())
            End Sub)
        MapperConfiguration = config.CreateMapper()
    End Sub
End Module

প্রোফাইল:

Public Class UserProfile
    Inherits AutoMapper.Profile
    Protected Overrides Sub Configure()
        Me.CreateMap(Of User, UserViewModel)()
    End Sub
End Class

ম্যাপিং:

Dim ViewUser = MapperConfiguration.Map(Of UserViewModel)(User)

আমি আপনার উত্তরটি চেষ্টা করেছি কিন্তু এটি এই লাইনে ত্রুটি দেখাচ্ছে: ডিম কনফিগারেশন = নতুন ম্যাপার কনফিগারেশন (// ওভারলোড রেজোলিউশন ব্যর্থ হয়েছে কারণ এই আর্গুমেন্টগুলির সাথে কোনও অ্যাক্সেসযোগ্য 'নতুন' বলা যায় না: 'পাবলিক ওভারলোডস সাব নিউ (ম্যাপার কনফিগারেশন এক্সপ্রেসনের হিসাবে কনফিগারেশনএক্সগ্রেশন)) আপনি দয়া করে আমাকে এতে সহায়তা করুন?
বারসান

@ বারসান: আপনি কি সমস্ত প্রোফাইল ক্লাস সঠিকভাবে কনফিগার করেছেন (ইউজারপ্রোফাইল এবং পোস্টপ্রোফাইল)? আমার জন্য এটি অটোম্যাপার 5.0.0 সংস্করণে কাজ করে।
রোল্যান্ড

নতুন সংস্করণ 6.0 প্রকাশিত হয়েছে। সুতরাং Protected Overrides Sub Configure()হ্রাস করা হয়। সবকিছু একই থাকে তবে এই লাইনটি Public Sub New()
রোল্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.