1

サービス結果を特定のビューモデルにマッピングしようとしています。IDと名前を含むCategoryというエンティティがあります。これは、リポジトリICategoryRepositoryを介して公開します。GetAllCategoriesへのカテゴリリポジトリを使用するサービスIInfrastructureServiceがあります。GetAllCategoriesはIListを返します。私のMVCプロジェクトでは。NavigationControllerというコントローラーがあります。このコントローラーは、GetAllCategoriesへのサービスを呼び出す必要があります。この結果を次のような構造にマッピングしたいと思います。

public class CategoryViewModel {
    public Guid CategoryId { get; set; }
    public string Name { get; set; }
}

public class CategoryMenuViewModel {
    public IList<CategoryViewModel> Categories { get; set; }
    public CategoryViewModel SelectedCategory { get; set; }
}

Automapperを使用してこれを実行したいと思います。Application_Start()で、マップを作成します。

Mapper.CreateMap<Category, CategoryViewModel>();

次に、私のコントローラーで:

public ViewResult CategoryMenu()
{
    CategoryMenuViewModel viewModel = new CategoryMenuViewModel();
    Mapper.CreateMap<Category, CategoryViewModel>();
    viewModel.Categories = Mapper.Map<IList<Category>, IList<CategoryViewModel>>(_infrastructureService.GetAllCategories());
    return View(viewModel);
}

これは私にこの例外を与えています:アセンブリ内の重複したタイプ名。

ここで何が間違っているのかわかりません。どんな助けやガイダンスも揺るがすでしょう!

4

1 に答える 1

5

なぜMapper.CreateMapコントローラー内で呼び出しているのですか?これは、AppDomainの存続期間全体にわたって、理想的にはで1回だけ呼び出す必要がありますApplication_StartMapper.Mapコントローラ内では、メソッドのみを呼び出します。

例外が発生する理由は、Application_StartでCategoryとCategoryViewModelの間のマッピング(.CreateMap)がすでに定義されているためです。それで:

public ViewResult CategoryMenu()
{
    var categories = _infrastructureService.GetAllCategories();
    CategoryMenuViewModel viewModel = new CategoryMenuViewModel();
    viewModel.Categories = Mapper.Map<IList<Category>, IList<CategoryViewModel>>(categories);
    return View(viewModel);
}
于 2012-07-28T06:14:33.703 に答える