NHibernate,使用 .NET Core ioc 容器将服务注入 IUserType
NHibernate, injecting service into IUserType using .NET Core ioc container
是否可以将服务注入到 UserType 中?
internal class MyUserType : IUserType
{
private static ISerializer _serializer;
public MyUserType (ISerializer serializer)
{
_serializer = serializer
}
}
尝试了为什么它应该适用于所有人但失败了,说明它需要一个默认的无参数构造函数
我不认为这是可能的,因为您需要利用 NH 的组件创建 pipeline/process,据我所知,它不容易公开。
您可以使用 属性 注入 'local default'。这将允许您依赖 ISerializer
抽象并在必要时替换它,可能会进行测试,但在不支持 IoC 的环境中依赖默认的具体类型。
internal class MyUserType : IUserType
{
private static ISerializer _serializer = new ConcreteSerializer();
public JsonShippingDetailsUserType()
{
}
public ISerializer Serializer { get; set; }
}
N.B。这是 属性 注入的一个非常幼稚的实现。如果您使用此解决方案,则需要 'harden' 代码。 Mark Seemann 的 DI 书中有一个很好的例子。
问题是 IUserType 由 NHibernate 管理,它使用自己的 IoC 容器,这意味着无法访问您选择的 IoC,并且同样意味着无法访问在您选择的 IoC 上注册的任何服务。没有简单的注入方法,我能想到的是某种代理或以某种方式访问 NHibernate 内部。
是否可以将服务注入到 UserType 中?
internal class MyUserType : IUserType
{
private static ISerializer _serializer;
public MyUserType (ISerializer serializer)
{
_serializer = serializer
}
}
尝试了为什么它应该适用于所有人但失败了,说明它需要一个默认的无参数构造函数
我不认为这是可能的,因为您需要利用 NH 的组件创建 pipeline/process,据我所知,它不容易公开。
您可以使用 属性 注入 'local default'。这将允许您依赖 ISerializer
抽象并在必要时替换它,可能会进行测试,但在不支持 IoC 的环境中依赖默认的具体类型。
internal class MyUserType : IUserType
{
private static ISerializer _serializer = new ConcreteSerializer();
public JsonShippingDetailsUserType()
{
}
public ISerializer Serializer { get; set; }
}
N.B。这是 属性 注入的一个非常幼稚的实现。如果您使用此解决方案,则需要 'harden' 代码。 Mark Seemann 的 DI 书中有一个很好的例子。
问题是 IUserType 由 NHibernate 管理,它使用自己的 IoC 容器,这意味着无法访问您选择的 IoC,并且同样意味着无法访问在您选择的 IoC 上注册的任何服务。没有简单的注入方法,我能想到的是某种代理或以某种方式访问 NHibernate 内部。