در ابتدا نیاز است که بستههای زیر را از Nuget دریافت و نصب کنیم:
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(); } } }