我在 Unity 文档中看到的示例让您通过输入来指定生命周期管理器new LifetimeManager()
排队。所以我有这个代码:
container.RegisterType<ApplicationDbContext>(new PerRequestLifetimeManager());
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new PerRequestLifetimeManager(),
new InjectionConstructor(typeof (ApplicationDbContext)));
container.RegisterType<UserManager<ApplicationUser>>(new PerRequestLifetimeManager());
很好,但我想知道为什么我要创建这么多实例。我有什么理由不应该这样写吗?
var lifetimeManager = new PerRequestLifetimeManager();
container.RegisterType<ApplicationDbContext>(lifetimeManager);
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(lifetimeManager,
new InjectionConstructor(typeof (ApplicationDbContext)));
container.RegisterType<UserManager<ApplicationUser>>(lifetimeManager);
这似乎是显而易见的,但通读 PDF,所有示例都是以前的风格,没有注释,所以我想知道我是否不理解它是如何工作的。
不,你不能这样做。如果您尝试以下操作,您会发现您的应用程序会抛出异常:
终身经理已注册。终身管理器不能重复使用,请创建一个新的。
描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。
异常详细信息:System.InvalidOperationException:生命周期管理器已注册。终身管理器不能重复使用,请创建一个新的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)