Nuget の Automapper、Unit Of Work、Entity Framework 5、ASPNET MVC 4、WebApi、および Windsor Castle を使用するアプリケーションに取り組んでいます。
これをマッピングする必要があるのか 、それとも Automapper によって自動的にマッピングされる必要があるのか わかりません
public IEnumerable<StoreDto> Get()
{
return Uow.Stores.GetAll().OrderBy(s => s.Name);
}
Uow.Stores.GetAll().OrderBy(s => s.Name)
を返しますIOrderedQueryable<Store>
。
エラー メッセージが表示される
式の型 IOrderedQueryable を型 IEnumerable に変換できません
foreach を実行して、返されGetAll
た各オブジェクトを Automapper のメソッドにStoreDto
変換する必要がありますか? Mapper.Map
Automapper はそれを変換してくれませんか?
これが、Automapper の使用方法と登録方法です。何か改善すべき/できることがあれば教えてください。
AutomapperInstaller.cs
:
public class AutoMapperInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
Mapper.Initialize(x => x.ConstructServicesUsing(container.Resolve));
RegisterProfilesAndResolvers(container);
RegisterMapperEngine(container);
}
private void RegisterMapperEngine(IWindsorContainer container)
{
container.Register(Component.For<IMappingEngine>().Instance(Mapper.Engine));
}
private void RegisterProfilesAndResolvers(IWindsorContainer container)
{
// register value resolvers
container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn<IValueResolver>());
// register profiles
container.Register(AllTypes.FromThisAssembly().BasedOn<Profile>());
var profiles = container.ResolveAll<Profile>();
foreach (var profile in profiles)
{
Mapper.AddProfile(profile);
}
}
WebWindsorInstaller
:
internal class WebWindsorInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component
.For<RepositoryFactories>()
.ImplementedBy<RepositoryFactories>()
.LifestyleSingleton());
container.Register(Component
.For<IRepositoryProvider>()
.ImplementedBy<RepositoryProvider>()
.LifestylePerWebRequest());
container.Register(Component
.For<IProjUow>()
.ImplementedBy<ProjUow>()
.LifestylePerWebRequest());
container.Register(Classes
.FromAssemblyContaining<Api.StoresController>()
.BasedOn<IHttpController>()
.If(t => t.Name.EndsWith("Controller"))
.LifestylePerWebRequest());
RegisterMapping(container, store);
}
private void RegisterMapping(IWindsorContainer container, IConfigurationStore store)
{
Mapper.CreateMap<Store, StoreDto>();
}
}
Store.cs
:
public class Store
{
public Store()
{
this.Branches = new List<Branch>();
}
public int Id { get; set; }
public string Name { get; set; }
public System.Data.Spatial.DbGeography Location{ get; set; }
public virtual ICollection<Branch> Branches{ get; set; }
}
StoreDto.cs
(今までのストアと同じ)
public class StoreDto
{
public StoreDto()
{
this.Branches = new List<BranchDto>();
}
public int Id { get; set; }
public string Name { get; set; }
public System.Data.Spatial.DbGeography Location{ get; set; }
public virtual ICollection<BranchDto> Branches{ get; set; }
}
そして、これは私がインストーラーを呼び出す方法ですIocConfig.cs
:
Container = new WindsorContainer()
.Install(new AutoMapperInstaller())
.Install(new ControllersInstaller());
私はそこに含めるべきかどうかわからない
.AddFacility<FactorySupportFacility>()