0

设置:

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?

谢谢阅读!

4

0 回答 0