Unity不解析配置中的注入属性

时间:2012-08-13 20:37:40

标签: c# dependency-injection unity-container app-config

我有一个简单的对象,我正在尝试注入属性。我不清楚为什么这似乎不起作用。调用resolve后,我的属性最终为null。

这是我的目标:

public interface IBasePage
{
    [Dependency]
    string Title { get; set; }

    [Dependency]
    string BaseUrl { get; set; }
}

这是我的Unity配置文件中的内容:

<register type="IWebActionDriver" mapTo="ConcreteWebDriver"/>

<register type="IBasePage" name="LoginPage" mapTo="LoginPage">
    <property name="Title" value="Login Page Title"/>
    <property name="BaseUrl" value="http://dev1.company.com"/>
  </register>

在我的单元测试的启动方法中,这是我正在尝试做的事情:

_container = new UnityContainer();
        UnityConfigurationSection configSection =
            (UnityConfigurationSection) ConfigurationManager.GetSection("unity");

 configSection.Configure(_container, "testContainer");
 _page = _container.Resolve<LoginPage>();

我的具体课程如下:

[InjectionConstructor]
public LoginPage(IWebActionDriver driver)
    {
        _driver = driver;
        _driver.Initialize();

        this.CurrentPage = _driver;
    }

Lo和Behold,Title和BaseUrl的属性为null。是否可以在对象上同时使用构造函数注入设置属性?我在做其他奇怪的事吗?

2 个答案:

答案 0 :(得分:1)

LoginPage被注册为命名注册(这是有道理的,因为你显然可以拥有多个IBasePage具体类型)。因此,您应该能够通过名称解析IBasePage来实现您想要的行为:

_page = _container.Resolve<IBasePage>("LoginPage");

答案 1 :(得分:0)

您需要在配置文件中包含命名空间和程序集名称,如:

 <namespace name="MyNameSpace" />
 <assembly name="MyAssemblyName" />