【发布时间】:2009-11-17 03:23:44
【问题描述】:
我目前正在进行转换,从使用 Ninject 到当前版本的 Castle Windsor,用于一个简单的 C# .NET 应用程序。
在大多数情况下,转换进展顺利,容器的实施完美无缺。但是,我的存储库对象有一个小问题。
我有一个按以下方式编码的用户存储库对象:
public class UserRepository : IUserRepository {
public UserRepository(IObjectContext objectContext) {
// Check that the supplied arguments are valid.
Validate.Arguments.IsNotNull(objectContext, "objectContext");
// Initialize the local fields.
ObjectContext = objectContext;
}
public UserRepository(IObjectContextFactory factory)
: this(factory.CreateObjectContext()) {
}
// -----------------------------------------------
// Insert methods and properties...
// -----------------------------------------------
}
为了对应此代码,我在应用程序的配置文件中设置了以下条目:
<castle>
<components>
<component id="objectContextFactory" lifestyle="custom"
customLifestyleType="Common.Infrastructure.PerWebRequestLifestyleManager, Common.Castle"
service="Project.DAL.Context.IObjectContextFactory, Project.DAL.LINQ"
type="project.DAL.Context.ObjectContextFactory, Project.DAL.LINQ">
</component>
<component id="userRepository" lifestyle="custom"
customLifestyleType="Common.Infrastructure.PerWebRequestLifestyleManager, Common.Castle"
service="Project.BL.Repository.IUserRepository, Project.BL"
type="Project.BL.Repository.UserRepository, Project.BL.LINQ">
<parameters>
<factory>${objectContextFactory}</factory>
</parameters>
</component>
</components>
</castle>
对我来说,一切看起来都应该如此。当我尝试解析 IObjectContextFactory 服务的实例时,我检索了一个 ObjectContextFactory 对象。当我尝试解决 IUserRepository 服务的实例时,我的问题就出现了。我遇到了以下令人愉快的例外情况:
无法创建组件“userRepository”,因为它需要满足依赖关系。 userRepository 正在等待以下依赖项:
服务:
- SandCastle.DAL.Context.IObjectContext which was not registered.
我已经尝试了我能想到的一切。所以,对于你们 stackoverflow 读者,我说:有什么想法吗?
【问题讨论】:
标签: c# dependency-injection castle-windsor constructor