Unity没有注入在基类中定义的依赖项。

4
我正在将Unity 2.0集成到我的ASP.NET应用程序中(使用UnityPageHandlerFactory方法),一切都很顺利,直到我尝试将其中一个依赖关系移动到一个PageBase类中,然后由所有页面共享。当调用BuildUp时,此属性从未设置。
我正在使用UnityPageHandlerFactory类,该类在请求每个页面时使用BuildUp(type,object)方法注入依赖项,如此处所述。只要我在声明的类型中定义了属性,就会注入属性。但是基类中定义的属性永远不会被设置。
我需要做其他事情吗?在我看来,这应该是自动的。
2个回答

4
原来我使用了BuildUp方法的不同重载,而使用引用示例中的那个重载方法解决了我的问题。我之前使用的是BuildUp(object)方法,但它并没有起作用。当我改为使用BuildUp(Type, object)方法时,一切都变得很完美!我不确定原因,只能猜测这与第一个重载方法中类型的解析方式有关,而显式提供类型时会发生什么。总之,这个小改变解决了我所有的问题。

1
你真是救了我一命啊!(好吧,不是真的救了我的命,但是非常感谢你发布问题和答案,这给了我很大的帮助!) - Norman H
BuildUp(object) 方法可能无法正常工作,因为此调用使用了推断:实际上您在此处调用的是 BuildUp<object>(object),这要求 Unity 使用对象类型来解决您的实例。BuildUp<YourType>(object) 也应该可以正常工作! - Charles HETIER

1
你能展示一下你代码中相关的部分吗?这是我拥有的,看起来它可以工作:
    class InjectedClass
    {

    }

    class  MyBase
    {
            [Dependency]
            public InjectedClass Dependency { get; set; }
    }

    class MyClass : MyBase
    {

    }

    class Program
    {
            static void Main(string[] args)
            {
                    UnityContainer uc = new UnityContainer();
                    uc.RegisterType<InjectedClass>();

                    MyClass m = new MyClass();
                    uc.BuildUp(m);

            }
    }

我也在asp.net应用程序中使用UnityPageHandlerFactory进行了测试,并且同样可以看到InjectedClass被注入到我的页面中,尽管依赖属性位于基类上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接