【发布时间】:2015-09-29 09:38:32
【问题描述】:
啊!我在这里拉头发。我一直在尝试使用 IoC 容器,在遇到一些你认为非常基本的问题之前,一切看起来都很好,很花哨,比如将参数传递给构造函数。
假设我在某个地方有一个类,其中混合了可以由 IoC 解析的引用类和只能在运行时解析的值类型(或其他一些类型):
public NFLFeedUnitOfWork(NFLFileType fileType, object feed, IConverterMappings<NFLFileType> nflConverterMappings, IDbContext context)
: base(fileType, feed, nflConverterMappings, context, ContextType.NFL)
{
//new NFLContext(connstringname, setAutoDetectChanges)
}
在这个特定的示例中,我传入 Enum (NFLFileType)、对象实例、2 个接口参数并将一个额外的硬编码属性传入基本构造函数 (ContextType.NFL)
以众神的名义,我怎么能在任何 IoC 容器中做到这一点?
问题实际上是2-fold:
1.) 如何传入仅在运行时才知道的对象?比如说现在调用代码是这样的:
protected override IFeedUnitOfWork GetUnitOfWork(NFLFileType fileType, object feed, string connectionString)
{
return new NFLFeedUnitOfWork(fileType, feed, new NFLConverterMappings(), new NFLContext(connectionString));
}
如何将此代码转换为使用 IoC? 也许是这样的?
protected override IFeedUnitOfWork GetUnitOfWork(NFLFileType fileType, object feed, string connectionString)
{
return IFLFeedUnitOfWork(fileType, feed);
}
最后2个参数在哪里自动解析,第一个2个我自己提供?
2.) 如何使用 IoC 将枚举、对象、值类型传递给构造函数? (或者也许在这个特定的情况下不要使用它?)
无论如何,非常感谢任何帮助,尤其是在第一点。 我目前正在使用 Unity,但任何其他 IoC 容器也可以。
我也不想将 IoC 容器传递到代码中,我只想在顶层的一个地方指定它。
【问题讨论】:
标签: .net ninject unity-container ioc-container