0

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

这是我的对象:

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

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

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

<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;
    }

瞧,Title 和 BaseUrl 的属性为空。可以在对象上同时使用构造函数注入设置属性吗?我在这里做其他奇怪的事情吗?

4

2 回答 2

1

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

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

于 2012-08-13T20:42:46.517 回答
0

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

 <namespace name="MyNameSpace" />
 <assembly name="MyAssemblyName" />
于 2012-08-13T20:43:41.803 回答