gpt4 book ai didi

asp.net - CaSTLe Windsor Controller 工厂和存储库未解析

转载 作者:行者123 更新时间:2023-12-04 20:21:25 28 4
gpt4 key购买 nike

我目前正在测试 CaSTLe Windsor vs. Ninject,我真的很喜欢 Windsor 提供的东西,我只是在存储库注入(inject)方面遇到了问题。

所以,这是设置...我有一个看起来像这样的 ControllersInstaller...

public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(FindControllers().Configure(ConfigureControllers()));
}

private BasedOnDescriptor FindControllers()
{
return AllTypes.FromThisAssembly()
.BasedOn<IController>()
.If(Component.IsInSameNamespaceAs<HomeController>())
.If(t => t.Name.EndsWith("Controller"));

}

private ConfigureDelegate ConfigureControllers()
{
return c => c.LifeStyle.Transient;
}
}

一个看起来像这样的上下文安装程序......
public class ContextInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.Where(t => t.Name == "MyContext"));
}
}

还有一个看起来像的 repo 安装程序......
public class RepoInstaller : IWindsorInstaller
{

public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.Where(type => type.Name.EndsWith("Repo"))
.WithService.DefaultInterface()
.Configure(c => c.LifeStyle.Singleton));
}
}

然后在 Global.asax 我正在注册它们...
private static void BootstrapContainer()
{
var container = new WindsorContainer() // Create a container to hold the dependencies
.Install(
new ContextInstaller(),
new RepoInstaller(),
new ControllersInstaller()
); // Scan this assembly for all IWindsorInstaller

var controllerFactory = new WindsorControllerFactory(container.Kernel); // Create a new instance
ControllerBuilder.Current.SetControllerFactory(controllerFactory); // Use my factory instead of default
}

我的家庭 Controller 看起来像......
    public class HomeController : Controller
{
IMyRepo _repo;

public HomeController(MyRepo repo)
{
_repo = repo;
}

但是无论出于何种原因,当我调试我得到的东西时......
此组件的某些依赖项无法静态解析。 MyProject.Controllers.HomeController 正在等待以下依赖项: 服务: - MyProject.Models.MyRepo 未注册。

我不知道为什么!我尝试将我的 repo 安装程序安装为单例,并尝试重新排序注册过程,以便在 Controller 之前设置 repo。

当我调试并点击 Global.asax 中的 Controller 工厂线时,它说除了 HomeController 之外的所有内容都已正确解决。

想法?

最佳答案

如果您注册您的存储库,包括接口(interface)
.WithService.DefaultInterface()
您的依赖必须基于接口(interface)(可能是 IRepo)而不是具体的。

如果您的依赖项是基于具体的,则删除 .WithService.DefaultInterface() 等依赖项将得到解决...但这不是最好的方法:因为存储库始终具有基于接口(interface)的依赖项

关于asp.net - CaSTLe Windsor Controller 工厂和存储库未解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152977/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com