是否可以将服务注入UserType?
internal class MyUserType : IUserType
{
private static ISerializer _serializer;
public MyUserType (ISerializer serializer)
{
_serializer = serializer
}
}
尝试了为什么它对所有人都有效但失败的原因,说明它需要默认的无参数构造函数
答案 0 :(得分:1)
我不认为这是不可能的,因为您需要利用NH的组件创建管道/过程,而AFAIK并不容易暴露。
您可以将属性注入与“本地默认值”一起使用。这样一来,您就可以依赖ISerializer
抽象并在必要时进行替换,可以进行测试,但是可以在不支持IoC的环境中依赖默认的具体类型。
internal class MyUserType : IUserType
{
private static ISerializer _serializer = new ConcreteSerializer();
public JsonShippingDetailsUserType()
{
}
public ISerializer Serializer { get; set; }
}
这是属性注入的真正幼稚的实现。如果采用此解决方案,则需要“强化”代码。马克·西曼(Mark Seemann)的直接投资书就是一个很好的例子。
答案 1 :(得分:0)
问题是IUserType由NHibernate管理,后者使用其自己的IoC容器,并且隐含地无权访问您选择的IoC,又隐含地无权访问在您选择的IoC上注册的任何服务。没有简单的注入方法,我能想到的是某种代理或以某种方式访问NHibernate内部。