【发布时间】:2016-07-05 08:52:53
【问题描述】:
我正在使用 Unity 作为 IOC,并尝试使用工厂方法注入接口,该工厂方法将接口作为参数。
由于某种原因,工厂方法 GetTitleParser() 中的 configReader 参数为 null,并且未获取注入的 ConfigurationReader() 实例。
当我在 RegisterTypes 方法中存在新 InjectionFactory 的行中放置一个调试点时,ITitleParser 未显示为映射到正确的映射类型。
谁能帮助我在这里做错了什么?
这是我的代码:
public class UnityContainerBuilder
{
public static IUnityContainer Build()
{
var container = new UnityContainer();
RegisterTypes(container);
return container;
}
public static void RegisterTypes(IUnityContainer container)
{
// NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
container.LoadConfiguration();
container.RegisterType<IConfigurationReader, ConfigurationReader>();
container.RegisterType<ITitleParser>(new InjectionFactory(c => ParserFactory.GetTitleParser()));
}
}
public class ParserFactory
{
public static ITitleParser GetTitleParser(IConfigurationReader configReader=null)
{
if(configReader==null) configReader = new ConfigurationReader();
/* rest of code here...*/
return parser;
}
}
当我使用以下代码时它可以工作。这是正确的做法吗?
container.RegisterType<IConfigurationReader, ConfigurationReader>();
container.RegisterType<ITitleParser>(new InjectionFactory(c =>
{
var configReader = c.Resolve<IConfigurationReader>();
var parser = ParserFactory.GetTitleParser(configReader);
return parser;
}));
【问题讨论】:
标签: c#-4.0 asp.net-web-api unity-container