继我最近关于 SimpleInjector 和混合 Web 请求/线程生活方式的问题之后,我似乎没有完全理解技术要求,并且一直在做一些我实际上不需要做的事情。
使用此代码
interface IUnitOfWork { }
interface IWebUnitOfWork : IUnitOfWork { }
interface IThreadUnitOfWork : IUnitOfWork { }
class UnitOfWork : IWebUnitOfWork, IThreadUnitOfWork { }
container.RegisterPerWebRequest<IWebUnitOfWork, UnitOfWork>();
container.RegisterLifetimeScope<IThreadUnitOfWork, UnitOfWork>();
container.Register<IUnitOfWork>(() => container.GetInstance<UnitOfWork>());
// Register as hybrid PerWebRequest / PerLifetimeScope.
container.Register<UnitOfWork>(() =>
{
if (HttpContext.Current != null)
return container.GetInstance<IWebUnitOfWork>() as UnitOfWork;
else
return container.GetInstance<IThreadUnitOfWork>() as UnitOfWork;
});
我的理解是,对于在 IIS 中运行的 AppDomain,IWebUnitOfWork
将返回,否则会出现错误,除非我明确声明 LifetimeScope 的实例来包装对容器的调用(它将返回IThreadUnitOfWork
)。
以下陈述让我意识到我并不完全理解我一直在做什么!
但是,您似乎不需要混合生活方式。混合生活方式是一种可以动态切换的生活方式(在每次调用 GetInstance 和每次注入时),而您似乎只需要在启动期间进行切换。
我的问题是:在什么情况下可以在不存在 HttpContext 的情况下调用在 IIS 中运行的 AppDomain 中加载的容器(或任何其他类),无论是静态的还是实例的?