是否可以在控制台应用程序中使用automapper?
它的Getting Started Page建议从应用程序启动时调用bootstrapper类,但是没有关于要从Main()
添加和调用的类的更多详细信息。
如何在简单的控制台应用程序中使用它?
答案 0 :(得分:10)
您可以在控制台启动时初始化Automapper,没有任何限制; Application_start是.net / iis中Web程序的启动位置,即只调用一次的代码。在Web项目开始时必须调用的任何配置都采用此方法。
编辑评论:如果您不想动态创建映射,但宁愿有地方初始化所有映射,只需创建一个名为InitializeAutomapper
的函数并在此处进行Mapper.Configure<X, Y>
来电。然后在Main()
方法中,只需调用该函数即可。有很多方法可以处理配置,但这是处理它的更简单方法。
代码示例
class Program
{
static void Main(string[] args)
{
// the app is starting here
InitializeAutomapper();
// we're configured, let's go!
DoStuff();
}
static void InitializeAutomapper()
{
AutoMapper.Mapper.CreateMap<TypeA, TypeB>();
AutoMapper.Mapper.CreateMap<TypeC, TypeD>();
AutoMapper.Mapper.CreateMap<TypeE, TypeF>();
}
}
答案 1 :(得分:3)
我知道这是一个老问题,但是如果您发现了这个问题,我想添加一个更新:Automaper 不再允许静态初始化。
下面,我将提供如何在控制台应用程序上使用它的完整示例。希望这可能对未来的某人有所帮助。
class Program
{
static void Main(string[] args)
{
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<MyClass, MyClassDTO>();
});
IMapper mapper = config.CreateMapper();
var myClass = new MyClass(){
Id = 10,
Name = "Test"
};
var dst = mapper.Map<MyClass, MyClassDTO>(myClass);
Console.WriteLine(dst.Id);
}
}
class MyClass
{
public int Id {get;set;}
public string Name {get;set;}
}
public class MyClassDTO
{
public int Id {get;set;}
public string Name {get;set;}
}
不要忘记包含 using AutoMapper;
答案 2 :(得分:0)
是的,但它似乎依赖于System.Web,它也必须包含在内。
(有关详细信息,请参阅Mysterious disappearing reference)