我有以下构造函数,其中ISession配置为解析为NHibernate会话:
public EntityStore(ISession session)
{
Session = session;
}
UnityConfig
如下:
container.RegisterType<ISessionFactory>(new ContainerControlledLifetimeManager(), new InjectionFactory(sf => new NhibernateSessionFactory().GetSessionFactory()));
现在,由于某种原因,我希望Unity在调用构造函数时注入一个会话,如下所示:
Claims = new EntityStore<TClaim, TKey>();
有人可以帮助这个绝对的Unity新手如何实现我上面描述的内容吗?
答案 0 :(得分:1)
如果您希望使用Unity创建对象,则需要调用Resolve
方法之一。在你的情况下,你可以做这样的事情:
Claims = container.Resolve<EntityStore<TClaim, TKey>>();
或
var s = container.Resolve<ISessionFactory>();
var Claims = new EntityStore<TClaim, TKey>(s);
这种方法有两个缺点。首先,您需要在班级中访问container
,这并不总是可行的。其次,您在类中创建依赖项,这使得它可以跟踪所有依赖项。
更好的方法是将所有依赖项作为构造函数参数或属性注入,并仅在顶级元素(例如Application类或主窗体)中使用container.Resolve
。在这种情况下,您可以替换您的类,以便将EntityStore<TClaim, TKey>
作为构造函数参数注入:
public class YourClass
{
public YourClass(EntityStore<TClaim, TKey> store)
{
// save reference to store and use it later
}
}