使用 AutoMapper 和 DI 容器实例化类型

2023-12-30

请看下面的代码:

public class Test : ITest
    {
        public ITest2 _iTest2;
        public int _id;
        public string _name;

        public Test(ITest2 test2)
        {
            _iTest2 = test2;
        }
    }

    public interface ITest
    {
    }

    public class Test2 : ITest2
    {
    }

    public interface ITest2
    {

    }

    public class Test3 : ITest3
    {
        public int _id;
        public string _name;
    }

    public interface ITest3
    {

    }

我的 Global.asax 中有以下内容:

Mapper.Initialize(m =>
            {  
 m.CreateMap<DataLayer.Test3, BusinessLayer.Test>().ConstructUsing(opt => new BusinessLayer.Test(new BusinessLayer.Test2()));
});

我可以在客户端应用程序中映射类型,执行以下操作:

cfg.CreateMap<DataLayer.Test3, BusinessLayer.Test>().ConstructUsing(opt => new BusinessLayer.Test(new BusinessLayer.Test2()));

如何使用 Castle Windsor 映射类型,而不必使用 Test 和 Test2 的 new 关键字?

我读了另一个答案,有人建议这样做:

 public void Install(IWindsorContainer container, IConfigurationStore store)
    {

        container.Register(Types.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn(typeof(IValueResolver<,,>)));
        // container.Register(Types.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn<IValueResolver>());
        container.Register(Types.FromThisAssembly().BasedOn<Profile>().WithServiceBase());
        var profiles = container.ResolveAll<Profile>();

        // Add your list of profiles to the mapper configuration here
        Mapper.Initialize(m => {
            m.ConstructServicesUsing(container.Resolve);
            profiles.ToList().ForEach(p => m.AddProfile(p));
        });

        // I'm not sure about this as I haven't used AutoMapper for a while,
        // but I assume you want to resolve the static mapper instance
        container.Register(Component.For<IMapper>().Instance(Mapper.Instance));
    }

我必须这样做吗:

cfg.CreateMap<DataLayer.Test3, BusinessLayer.Test>().ConstructUsing(opt => new BusinessLayer.Test(new BusinessLayer.Test2()));

或者 AutoMapper 应该能够使用以下方法映射类型:

cfg.CreateMap<DataLayer.Test3, BusinessLayer.Test>()

为了让 AutoMapper 使用 Windsor 创建目标类型,您需要配置两件事:

  1. 告诉 AutoMapper 使用 Windsor 构建服务
  2. 告诉 AutoMapper(每个映射)实际使用上述配置

     var container = new WindsorContainer();
    
        Mapper.Initialize(m =>
        {
            m.ConstructServicesUsing(container.Resolve);
    
            m.CreateMap<Test3, ITest>().ConstructUsingServiceLocator(); // This is important!
    
        });
    
        container.Register(Component.For<ITest>().ImplementedBy<Test>());
        container.Register(Component.For<ITest2>().ImplementedBy<Test2>());
        container.Register(Component.For<ITest3>().ImplementedBy<Test3>());
    
        var test3 = new Test3();
        var test1 = Mapper.Instance.Map<Test3, ITest>(test3);
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AutoMapper 和 DI 容器实例化类型 的相关文章

  • 如何引用 .net 可执行文件中的类?

    IL 反汇编程序显示了我想在项目中使用的 Net 可执行文件中的类 我如何使用我自己项目中的这些类 从 Visual Studio 上的项目添加对该可执行文件的引用 您应该有权访问它定义的公共类 可执行文件是一个像任何其他程序集一样的程序集
  • 创建文件并使用内存流保存到其中

    如何创建文件并使用内存流写入文件 我需要使用内存流来防止其他线程尝试访问该文件 我试图保存到文件的数据是 html 如何才能做到这一点 假设您的意思是如何将文件的内容复制到内存流 如果您使用的是框架4 var memoryStream ne
  • Windows 窗体中的切换开关控件

    我正在设计一个拨动开关控制使用CheckBox 但目前我的控件只能画一个圆圈 如何绘制如下图所示的圆形形状 以及如何根据控件的值更改圆圈的位置以表示选中和未选中的状态 如下图所示 这是我的代码 public class MyCheckBox
  • 不同翻译单元中字符串文字的内存地址是否相同?

    假设我们有以下 cpp 文件 include
  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • ScrollableControl 在整个控件周围绘制边框

    我正在构建基于的自定义用户控件ScrollableControl 现在我正在尝试在控件周围添加边框 类似于 DataGridView 的边框 我可以使用以下方法绘制边框 e Graphics TranslateTransform AutoS
  • 使用 R.Net 版本 1.5.5 创建 REngine 实例

    我正在尝试创建一个 Hello World 示例R Language using R Net版本1 5 5 从 NuGet 加载 不幸的是 我见过的在线示例都不起作用 这就是我所做的 已安装Microsoft R Open 3 2 4 增强
  • FxCop 和 GAC 疯狂

    当我尝试分析依赖于模式和实践 企业库数据 以及其他 2 0 0 0 的项目时使用 FxCop FxCop 抱怨它不能 定位程序集引用 即使正在分析的应用程序 dll 是根据其编译的此版本及其在 GAC 中 如果我浏览到 GAC 尝试选择相同
  • C#:如何确定坐标是否在美国大陆?

    我正在获取坐标 纬度 经度 我想检查这些坐标是否位于美国大陆 有没有一种简单的方法可以在 C 中实现 我可以将坐标转换为 MGRS 或 UTM 谢谢 哇哦 他们专门为你准备了 http econym org uk gmap states x
  • autofac 中的条件组件注册

    是否可以根据其他组件的状态有条件地注册组件 就像是 ContainerBuilder RegisterConditionally
  • PHP 中的依赖注入

    我一直在研究依赖注入 我是在关注某件事还是完全没有关注 代码是好是坏 依赖注入与否 下面的代码是CMS系统的基础 现在有一个名为 page details 的表 其中存储了所有网页 目录 文件结构 htaccess index php cl
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • 通用 lambda 的数量

    可以通过访问非泛型 lambda 的数量来推断其数量operator template
  • 如何在不加载到内存的情况下对大型 csv 文件进行排序

    我有 20GB csv 文件 如下所示 CallId MessageNo Information Number 1000 1 a 2 99 2 bs 3 1000 3 g 4 66 2 a 3 20 16 3 b 1000 7 c 4 99
  • 如何通过反射获取透明代理的属性值?

    我的代码接收透明代理而不是原始实例 虽然这var type obj GetType 产生原始类的类型 下面的代码抛出TargetException 对象与目标类型不匹配 var value property GetValue obj nul
  • 如何使用 XmlSerializer 生成标记前缀

    我想使用 XmlSerializer 生成以下内容
  • 即使没有任何转换,也违反了 C 中的严格别名?

    How can i and u i在此代码中打印不同的数字 即使i定义为int i u i 我只能假设我在这里触发了 UB 但我不知道具体是如何触发的 ideone演示 http ideone com Gcv5Xm如果我选择 C 作为语言
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参

随机推荐

  • 为什么我要 std::move std::shared_ptr?

    我一直在寻找铿锵源码 https clang llvm org doxygen CompilerInstance 8cpp source html l00069我发现了这个片段 void CompilerInstance setInvoca
  • 将汇编 NASM 代码链接到 GCC

    我在编译汇编代码 nasm 时遇到问题 在 Linux elf32 上 使用 g 编译后它不会失败 但是当我尝试使用 i686 w64 mingw32 g 对于 Win32 构建它时 它失败了 我的 build sh 脚本 bin bash
  • 组合两个具有重叠范围的数据框并计算按类别分组的重叠

    建立在这个答案 https stackoverflow com questions 58570888 combine two dataframes based on ranges which may partially overlap us
  • 为什么方括号内的点不匹配任何字符?

    为什么这个 Java正则表达式与我的不匹配 foo 文本 同时 完美匹配 已测试here http www regexplanet com advanced java index html 相当于逃避 点 字符 即 一旦角色出现在字符类 h
  • if 语句摆脱: if 中的错误:参数长度为零

    The idea 根据selectizeInput 输入 我想显示数据框中的一行数据 然而 某些变量只有在其值不存在时才会显示 FALSE selectizeInput 包括一个占位符提示 这是非常理想的 问题 我开发的代码实际上可以工作
  • 无法登录oracle系统账户

    我最近安装了oracle 12c 无法访问系统本地生成的连接 Ora 01017 错误 尽管我知道它是正确的 因为我更改了密码 无论如何 stackoverflow 上的其他人将我重定向到此https iwikte wordpress co
  • 用于查找 git 分支上创建的所有 TODO 注释的脚本?

    我有一个已经变得相当大的功能分支 我们的代码中有相当多挥之不去的 TODO 注释 但我想找到在尚未合并到 master 的提交上添加到代码中的所有 TODO 尚未删除 我该怎么办呢 您可以简单地将您的分支与 master 进行比较 并在输出
  • 在命令行 Dart 应用程序中清除终端屏幕

    这个不起作用 在 Windows 的 Cmd Box 中 import dart io void main print Hello World Process start cls runInShell true then process s
  • Dart 中的 patch 关键字有什么作用?

    有人可以解释一下 patch 关键字的作用吗 例如 在math patch dart I see patch num pow num x num exponent gt MathNatives pow x exponent patch do
  • 向 ggplot 条形图添加标签

    我想做一个黑色轮廓的条形图 条形内有百分比 这可以从 qplot 中实现吗 我得到了显示的百分比 但它们与特定的条形不一致 软件包 ggplot2 重塑 x lt data frame filename c file1 file2 file
  • Symfony2 JSON 响应返回奇怪的 UTF 字符

    这是我的控制器方法 public function sendjsonAction message this gt getDoctrine gt getRepository AcmeStoreBundle Message gt findAll
  • 不明确的隐式值是我们想让错误存在于编译时的唯一方法吗

    trait Foo trait Bar extends Foo def doStuff T lt Foo x T implicit ev T Foo x doStuff new Foo ambiguous implicit value do
  • 如何在 IE 中翻转网站? (4月1日)

    我们正在办公室进行 4 月 1 日的恶作剧 并希望明天将我们的公司网站翻转几个小时 我的补丁在任何地方都有效 但在 IE 中无效 任何人都可以帮忙吗 尝试这个 http msdn microsoft com en us library ms
  • 非负集减法

    这适用于任何语言 但我会在节点中实现它 我有一组整数 以及一个需要从该组总和中减去的值 4 5 6 7 8 25 如果我们均匀地减去每个数字 我们会得到 1 0 1 2 3 但是 我不希望任何小于 0 的数字 因此 如果我编写一个算法来执行
  • Rails 生成 has_many 关联

    有没有办法使用以下方法为列生成 has many 关联Rails generate scaffold控制台中的命令 I know belongs to可用并且有用例references但不确定has many 没有用于 a 的列has ma
  • 粘页脚失败

    我正在尝试使页脚正确 但遇到问题 我能够将页脚保持在页面底部 但很快意识到当窗口变小时 它最终会覆盖内容 我可以通过取消position absolute来解决这个问题 但是如果我这样做 页脚将不再停留在页面底部 我已经尝试了很多不同的方法
  • MATLAB 中冒号运算的组合

    我有一个关于 MATLAB 中冒号运算符和向量扩展的问题 我的问题是理解以下代码行如何扩展 以便能够将其用于其他序列 MATLAB 代码行是 a 1 2 5 1 4 7 注意a扩展前未定义 这返回向量 a 1 0 3 0 7 我知道冒号运算
  • WinForms 拖放中的 e.Data.GetData 转换问题

    我试图在程序的两个实例之间进行拖放 但是当我尝试将数据转换为我的类型时 它会抛出无效的转换异常 这是代码 protected virtual void GetDropIEntities DragEventArgs e foreach str
  • 无法理解字符串排列 Java 代码

    我有这个工作代码可以打印字符串排列而无需重复 但无法理解它在逻辑上是如何工作的 任何建议都会非常有帮助 private static void permutation String input String sofar if input e
  • 使用 AutoMapper 和 DI 容器实例化类型

    请看下面的代码 public class Test ITest public ITest2 iTest2 public int id public string name public Test ITest2 test2 iTest2 te