统一容器类与不同的生命周期

时间:2016-06-06 13:03:12

标签: c# asp.net-mvc-4 unity-container observer-pattern

我目前正在我的UnityConfig.cs内进行以下操作,由App_Start的UnityMvcActivator调用:

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注册我的观察者并在应用启动时初始化它们。

1 个答案:

答案 0 :(得分:1)

检查EmailObserver构造函数 - 我认为那里的所有类型都应该是单例。