【发布时间】:2016-06-06 13:03:12
【问题描述】:
我目前正在我的UnityConfig.cs 中执行以下操作,UnityMvcActivator 在App_Start 调用它:
container.RegisterType<IUserDal, UserDal>(new PerRequestLifetimeManager());
我也在这样做:
container.RegisterType<IEmailObserver, EmailObserver>(new ContainerControlledLifetimeManager());
我应该提到IUserDal 在IEmailObserver 的构造函数中:
public EmailObserver(IUserDal userDal);
现在我想在应用程序启动时启动EmailObserver 实例,所以我有这个:
`DependencyResolver.SetResolver(new UnityDependencyResolver(container));
container.Resolve<IEmailObserver>();//this line fails
我得到的错误信息是:
Exception is: InvalidOperationException - The PerRequestLifetimeManager can only be used in the context of an HTTP request. Possible causes for this error are using the lifetime manager on a non-ASP.NET application, or using it in a thread that is not associated with the appropriate synchronization context.
我正在尝试实现Observer Pattern,但我想使用 Unity 注册我的观察者并在应用启动时对其进行初始化。
【问题讨论】:
-
您可能调用
container.Resolve()太早了(当时还没有HTTPContext可用)。你到底在哪里称呼它?它是在Application_Start()期间调用的代码的一部分吗?
标签: c# asp.net-mvc-4 unity-container observer-pattern