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 内部。