2

我正在使用 AutoMapper 将域实体映射到 Asp.Net MVC 应用程序中的视图模型。我在 Castle Windsor 中注册了这些映射类,因此它们可用于控制器通过依赖注入。这些映射类有一个虚拟的 CreateMap 方法,我可以在其中覆盖 AutoMapper 的映射,告诉它如何将字段从实体映射到视图模型,忽略哪些字段,指向转换数据的方法等。所有这些都运行良好; 向 AutoMapper 背后的人们致敬!

到目前为止,我一直在 Windsor 中使用 Singleton 生活方式注册映射类,但其中一个需要使用来自 Rhino.Security 的 IAuthorizationRepository,它需要将其组件注册为 Transient。这迫使我将映射类也注册为瞬态,因为持有对瞬态 IAuthorizationRepository 的引用的单例映射类在第二次使用映射器时会导致问题(即,ISession 已关闭错误)。

将所有这些映射类注册到一个 Transient 生活方式是否会浪费资源,这会导致映射类被实例化,并且每次系统想要将域实体映射到视图模型时都会运行 CreateMap 方法?

或者我应该尝试找到一种方法将 IAuthorizationRepository 与映射类分开,以便我可以将映射类保持为单例?

谢谢丹

4

1 回答 1

2

另一种解决方法是使用 TypedFactoryFacility,而不是将 IAuthorizationRepository 注入到你的单例中,你可以注入Func<IAuthorizationRepository>

于 2010-10-05T18:13:00.470 回答