AutoMapper类在IoC中具有瞬态生活方式

时间:2010-09-09 01:47:11

标签: castle-windsor automapper ioc-container transient

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

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

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

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

由于 丹

1 个答案:

答案 0 :(得分:2)

另一种方法是使用TypedFactoryFacility,然后不是将IAuthorizationRepository注入你的单身,你可以注入Func<IAuthorizationRepository>