تزریق وابستگیهای Automapper به کمک Autofac
نویسنده: ابوالفضل بهاری س
تاریخ: ۱۳۹۵/۰۶/۰۶ ۱۲:۵۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
PM>Install-Package Autofac PM>Install-Package Autofac.Mvc5 PM>Install-Package AutoMapper
namespace AufacDI.DomainClasses
{
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
}
} namespace AufacDI.ViewModel
{
public class CategoryViewModel
{
public int Id { get; set; }
public int Name { get; set; }
}
} using AufacDI.DomainClasses;
using AufacDI.ViewModel;
using AutoMapper;
namespace AufacDI.MapperProfile
{
public class CategoryProfile : Profile
{
public CategoryProfile()
{
CreateMap<Category, CategoryViewModel>();
CreateMap<CategoryViewModel, Category>();
}
}
} using AufacDI.MapperProfile;
using Autofac;
using AutoMapper;
using System;
using System.Linq;
namespace AufacDI.IocConfig
{
public static class IoCContainer
{
public static void Register(ContainerBuilder builder)
{
// شناسایی پروفایلها براساس نمونه از کلاس پر.وفایل
var profiles = from types in typeof(CategoryProfile).Assembly.GetTypes()
where typeof(Profile).IsAssignableFrom(types)
select (Profile)Activator.CreateInstance(types);
// رجیستر کردن کلاسهای پروفایل در اتومپر
builder.Register(ctx => new MapperConfiguration(cfg =>
{
foreach (var profile in profiles)
cfg.AddProfile(profile);
})).SingleInstance().AutoActivate().AsSelf();
// رجیستر کردن کلاس MapperConfiguration و ایجاد آن براساس IMapper
builder.Register(ctx => ctx.Resolve<MapperConfiguration>().CreateMapper()).As<IMapper>().InstancePerRequest();
}
}
} var builder = new ContainerBuilder();
// تزریق کنترلرها برای تزریف سایر المانها در سازنده
builder.RegisterControllers(typeof(MvcApplication).Assembly).InstancePerDependency();
// فراخوانی متد رجیستر برای تزریق وابستگی مپر و کلاسهای پروفایل آن
IoCContainer.Register(builder);
// ایجاد نمونه از سازنده
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); namespace AufacDI.WebApplication.Controllers
{
public class HomeController : Controller
{
private readonly IMapper _mapepr;
public HomeController(IMapper mapepr)
{
_mapepr = mapepr;
}
public ActionResult Index()
{
// مپ کردن یک کلاس به یک کلاس
var categoryViewModel = new CategoryViewModel { Id = 1, Name = "News" };
var categoryModel = _mapepr.Map<CategoryViewModel, Category>(categoryViewModel);
// مپ کردن لیست از کلاس به لیستی از کلاس
var categoryListModel = new List<Category>();
categoryListModel.Add(new Category { Id = 1, Name = "A" });
categoryListModel.Add(new Category { Id = 2, Name = "B" });
categoryListModel.Add(new Category { Id = 3, Name = "C" });
categoryListModel.Add(new Category { Id = 4, Name = "D" });
categoryListModel.Add(new Category { Id = 5, Name = "E" });
var categoryListViewModel = categoryListModel.AsQueryable().ProjectTo<CategoryViewModel>(_mapepr.ConfigurationProvider).ToList(); ;
return View();
}
}
}