Skip to content

Commit

Permalink
converted to weak typed mapper
Browse files Browse the repository at this point in the history
  • Loading branch information
darind committed May 8, 2010
1 parent c4a8744 commit 0bb208f
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 48 deletions.
2 changes: 0 additions & 2 deletions SampleMvc.sln
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,9 @@ Global
{7D8F7565-AA3D-4978-B596-568E8DBF25C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D8F7565-AA3D-4978-B596-568E8DBF25C7}.Release|Any CPU.Build.0 = Release|Any CPU
{F5ED7806-9BAC-40FE-B62D-A5F8E23AB538}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5ED7806-9BAC-40FE-B62D-A5F8E23AB538}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5ED7806-9BAC-40FE-B62D-A5F8E23AB538}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F5ED7806-9BAC-40FE-B62D-A5F8E23AB538}.Release|Any CPU.Build.0 = Release|Any CPU
{4EB4ABDE-7D0F-40CF-8CFF-FB2669FB01F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4EB4ABDE-7D0F-40CF-8CFF-FB2669FB01F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EB4ABDE-7D0F-40CF-8CFF-FB2669FB01F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4EB4ABDE-7D0F-40CF-8CFF-FB2669FB01F5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
Expand Down
9 changes: 5 additions & 4 deletions src/SampleMvc.Web/Controllers/UsersController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
public class UsersController : Controller
{
private readonly IUsersRepository _repository;
private readonly BaseBidirectionalMapper<User, UserViewModel> _userMapper;
private readonly IMapper _userMapper;

public UsersController(
IUsersRepository repository,
BaseBidirectionalMapper<User, UserViewModel> userMapper)
IMapper userMapper)
{
_repository = repository;
_userMapper = userMapper;
Expand All @@ -37,14 +37,15 @@ public ActionResult New()
}

[HttpPost]
[AutoMap(typeof(User), typeof(UserViewModel))]
public ActionResult Create(UserViewModel userView)
{
// create a new user
if (!ModelState.IsValid)
{
return View("New", userView);
}
var user = _userMapper.MapFrom(userView);
var user = (User)_userMapper.Map(userView, typeof(UserViewModel), typeof(User));
_repository.Save(user);
return RedirectToAction("Index", "Users");
}
Expand Down Expand Up @@ -73,7 +74,7 @@ public ActionResult Update(UserViewModel userView)
{
return View("Edit", userView);
}
var user = _userMapper.MapFrom(userView);
var user = (User)_userMapper.Map(userView, typeof(UserViewModel), typeof(User));
_repository.Update(user);
return RedirectToAction("Index", "Users");
}
Expand Down
12 changes: 0 additions & 12 deletions src/SampleMvc.Web/Mappers/BaseBidirectionalMapper.cs

This file was deleted.

7 changes: 3 additions & 4 deletions src/SampleMvc.Web/Mappers/IMapper.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
namespace SampleMvc.Web.Mappers
{
using System.Collections.Generic;
using System;

public interface IMapper<TSource, TDestination>
public interface IMapper
{
TDestination MapFrom(TSource source);
IEnumerable<TDestination> MapFrom(IEnumerable<TSource> source);
object Map(object source, Type sourceType, Type destinationType);
}
}
23 changes: 4 additions & 19 deletions src/SampleMvc.Web/Mappers/UserMapper.cs
Original file line number Diff line number Diff line change
@@ -1,36 +1,21 @@
namespace SampleMvc.Web.Mappers
{
using System.Collections.Generic;
using System;
using AutoMapper;
using SampleMvc.Business.Domain;
using SampleMvc.Web.Models;

public class UserMapper : BaseBidirectionalMapper<User, UserViewModel>
public class UserMapper : IMapper
{
static UserMapper()
{
Mapper.CreateMap<User, UserViewModel>();
Mapper.CreateMap<UserViewModel, User>();
}

public override UserViewModel MapFrom(User source)
public object Map(object source, Type sourceType, Type destinationType)
{
return Mapper.Map<User, UserViewModel>(source);
}

public override IEnumerable<UserViewModel> MapFrom(IEnumerable<User> source)
{
return Mapper.Map<IEnumerable<User>, IEnumerable<UserViewModel>>(source);
}

public override User MapFrom(UserViewModel source)
{
return Mapper.Map<UserViewModel, User>(source);
}

public override IEnumerable<User> MapFrom(IEnumerable<UserViewModel> source)
{
return Mapper.Map<IEnumerable<UserViewModel>, IEnumerable<User>>(source);
return Mapper.Map(source, sourceType, destinationType);
}
}
}
7 changes: 5 additions & 2 deletions src/SampleMvc.Web/Mvc/AutoMapAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var model = filterContext.Controller.ViewData.Model;
var viewModel = Mapper.Map(model, SourceType, DestType);
filterContext.Controller.ViewData.Model = viewModel;
if (model != null && model.GetType() == SourceType)
{
var viewModel = Mapper.Map(model, SourceType, DestType);
filterContext.Controller.ViewData.Model = viewModel;
}
}
}
}
1 change: 0 additions & 1 deletion src/SampleMvc.Web/SampleMvc.Web.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
</Compile>
<Compile Include="Mappers\BaseBidirectionalMapper.cs" />
<Compile Include="Mappers\IMapper.cs" />
<Compile Include="Mappers\UserMapper.cs" />
<Compile Include="Models\UserViewModel.cs" />
Expand Down
12 changes: 8 additions & 4 deletions tests/SampleMvc.Web.Tests/Controllers/UsersControllerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class UsersControllerTests : TestControllerBuilder
{
private UsersController _sut;
private IUsersRepository _repositoryStub;
private BaseBidirectionalMapper<User, UserViewModel> _userMapperStub;
private IMapper _userMapperStub;

public UsersControllerTests()
{
Expand Down Expand Up @@ -58,7 +58,7 @@ public TestContext TestContext
public void MyTestInitialize()
{
_repositoryStub = MockRepository.GenerateStub<IUsersRepository>();
_userMapperStub = MockRepository.GenerateStub<BaseBidirectionalMapper<User, UserViewModel>>();
_userMapperStub = MockRepository.GenerateStub<IMapper>();
_sut = new UsersController(_repositoryStub, _userMapperStub);
InitializeController(_sut);
}
Expand Down Expand Up @@ -121,7 +121,9 @@ public void UsersController_Create_Success()
// arrange
var userView = new UserViewModel();
var user = new User();
_userMapperStub.Stub(x => x.MapFrom(userView)).Return(user);
_userMapperStub
.Stub(x => x.Map(userView, typeof(UserViewModel), typeof(User)))
.Return(user);

// act
var actual = _sut.Create(userView);
Expand Down Expand Up @@ -193,7 +195,9 @@ public void UsersController_Update_Success()
// arrange
var userView = new UserViewModel();
var user = new User();
_userMapperStub.Stub(x => x.MapFrom(userView)).Return(user);
_userMapperStub
.Stub(x => x.Map(userView, typeof(UserViewModel), typeof(User)))
.Return(user);

// act
var actual = _sut.Update(userView);
Expand Down

0 comments on commit 0bb208f

Please sign in to comment.