设置:
LightinjectComposition.cs
serviceRegistry.Register<IdentityLocator>(f => IdentityLocator.GetInstance());
serviceRegistry.Register<IIdentity>(f => f.GetInstance<IdentityLocator>().Get());
// I could use this too:
// serviceRegistry.Register<IIdentity>(f => f.GetInstance<IdentityLocator>().Get(Thread.CurrentThread.CurrentCulture));
// There are N classes that have a dependency to IIdentity
serviceRegistry.Register<InterfaceN, ClassN>();
IdentityLocator 检索同一个类的一个实例,它有两个方法:
- Get():根据 Thread.CurrentThread.CurrentCulture 检索内部类的实例。
- Get(CultureInfo):根据 CultureInfo 检索内部类的实例。
我有两个项目:一个用于 api(称为 Api),另一个用于 DI 容器配置(称为 Dependency,其中包含对其他项目的引用 - NHibernate 映射、服务等 - 并由 API 引用)。在名为 Dependency 的项目中,LightinjectComposition.cs 所在的位置。
问题是,在 NancyFX Bootstrapper 中,当前文化是根据请求中收到的值设置的,但在实例解决后线程的文化不会改变。
有没有办法使用当前文化检索实例,或者我做错了(关于 IoC 模式)?
在 NancyFX Bootstrapper 中,我将文化设置为:
pipelines.BeforeRequest += context =>
{
Thread.CurrentThread.CurrentCulture = context.Culture;
return null;
};
也许我应该将 IdentityLocator 的实例传递给依赖类而不是 IIdentity?
谢谢阅读!