如何解决依赖注入和用户特定数据
| 我有使用ORM的应用程序(处于休眠状态,但事实并非如此)。 要创建NH Session,我们需要传递一个地方:用户名,数据库名称等。因此,我实现了:public interface ISettingsManager
{
Settings MySettings {get;set;}
}
public class Settings
{
public string DbUser{get;set;}
public string DbAddress {get;set;}
public string DbPassword{get;set;}
//...
}
public class SessionProvider
{
[Inject]
public ISettingsManager MySettings {get;set;}
public Session CreateSession
{
//Create Session object using settings passed do MySettings via IoC.
}
}
public static Main()
{
// very beggining of my application,bootstrap the DI container
Bind<ISettingsManager>().To<SettingsManagerImpl>();
// Application run
}
我所有的NHibernate会话提供程序都通过DI(Ninject)注入了“ 1”,因此我可以简单地使用它。它的作用就像是一种伤害,但是现在我需要在我的应用程序中支持许多用户,并且问题出现了。当应用程序启动时,我无法绑定ISettingsManager,因为我现在不登录,因为我现在不登录。
因此,问题是,如何以最佳方式实现在不使用服务位置的情况下传递当前记录的用户设置?
解决方法
假设我正确理解了这个问题,那么像单例模式这样的东西可能会有所帮助(请参阅http://en.wikipedia.org/wiki/Singleton_pattern)。
一个单例将存储信息,并在需要时提供信息。其他组件将只需要知道如何访问单例,而无需更具体。
为了使单个用户设置摆脱单一状态,将键(例如用户ID)映射到值的字典类型的数据结构可能会很好。
, 我将对所有身份验证使用单独的数据库,然后从该数据库中提取用户特定的数据库设置。
使用检索到的用户特定设置,我将创建要注入到ORM连接过程中的类,并使用构造函数或属性注入将其注入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。