NHibernate,使用.NET核心ioc容器将服务注入IUserType

NHibernate,使用.NET核心ioc容器将服务注入IUserType,nhibernate,Nhibernate,是否可以将服务注入到用户类型中 internal class MyUserType : IUserType { private static ISerializer _serializer; public MyUserType (ISerializer serializer) { _serializer = serializer } } 尝试了“为什么假定它对所有人都有效”但失败了,声明它需要一个默认的无参数构造函数我认为这是不可能的,因为

是否可以将服务注入到用户类型中

internal class MyUserType : IUserType
{
    private static ISerializer _serializer;


    public MyUserType (ISerializer serializer)
    {
        _serializer = serializer
    }
} 

尝试了“为什么假定它对所有人都有效”但失败了,声明它需要一个默认的无参数构造函数

我认为这是不可能的,因为您需要进入NH的组件创建管道/流程,而据我所知,该管道/流程并不容易公开

您可以使用带有“本地默认值”的属性注入。这将允许您依赖于
ISerializer
抽象,并在必要时替换它,可能需要进行测试,但在不支持IoC的环境中依赖于默认的具体类型

internal class MyUserType : IUserType
{
    private static ISerializer _serializer = new ConcreteSerializer();

    public JsonShippingDetailsUserType()
    {
    }

    public ISerializer Serializer { get; set; }
} 

注意:这是一个非常幼稚的属性注入实现。如果使用此解决方案,则需要“强化”代码。Mark Seemann的DI书有一个很好的例子。

问题是,IUserType由NHibernate管理,它使用自己的IoC容器,暗示无法访问您选择的IoC,并且暗示无法访问您选择的IoC上注册的任何服务。注入的方法并不简单,我能想到的是某种代理,或者以某种方式访问NHibernate内部。

谢谢你的回答。据我所知.NET IoC容器不支持属性注入,所以这样做对我没有帮助,除非我使用其他人来完成这项工作,但我希望坚持.NET提供的内容,我认为这不会有任何影响。在NH代码的某个地方,我猜它在使用自定义类型执行类似于
Activator.CreateInstance(…)
的操作。IoC容器不是该过程的一部分。