我有一个简单的对象,我正在尝试注入属性。我不清楚为什么这似乎不起作用。调用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。是否可以在对象上同时使用构造函数注入和设置属性?我在做其他奇怪的事吗?
答案 0 :(得分:1)
LoginPage被注册为命名注册(这是有道理的,因为你显然可以拥有多个IBasePage具体类型)。因此,您应该能够通过名称解析IBasePage来实现您想要的行为:
_page = _container.Resolve<IBasePage>("LoginPage");
答案 1 :(得分:0)
您需要在配置文件中包含命名空间和程序集名称,如:
<namespace name="MyNameSpace" />
<assembly name="MyAssemblyName" />