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

时间:2018-12-05 08:53:22

标签: nhibernate

是否可以将服务注入UserType?

internal class MyUserType : IUserType
{
    private static ISerializer _serializer;


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

尝试了为什么它对所有人都有效但失败的原因,说明它需要默认的无参数构造函数

2 个答案:

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