gpt4 book ai didi

c# - 依赖注入(inject)不知道我要注入(inject)的类型

转载 作者:太空狗 更新时间:2023-10-29 20:30:48 24 4
gpt4 key购买 nike

我想使用 HaveBox用于依赖注入(inject)。但这不是关于 HaveBox 的问题.所以我创建了基本 Controller :

public abstract class BaseController : Controller
{
protected readonly IRepository m_Repository;

protected BaseController(IRepository repository)
{
m_Repository = repository;
}
}

而我的 HomeController 继承自 BaseController。将 HaveBoxConfig.RegisterTypes(); 添加到 Application_Start 方法,HaveBoxConfig 的实现是:

 public class HaveBoxConfig
{
public static void RegisterTypes()
{
var container = new Container();
container.Configure(config => config.For<IService>().Use<Service>());
container.Configure(config => config.For<IRepository>().Use<Repository>());
IDependencyResolver resolver = DependencyResolver.Current;
var newResolver = new MyResolver(container, resolver);
DependencyResolver.SetResolver(newResolver);
}
}

还有我的解析器:

public class MyResolver : IDependencyResolver
{
private readonly IContainer m_container;
private readonly IDependencyResolver m_resolver;
public MyResolver(IContainer container, IDependencyResolver resolver)
{
m_container = container;
m_resolver = resolver;
}
public object GetService(Type serviceType)
{
try
{
return m_container.GetInstance(serviceType);
}
catch (Exception ex)
{
return m_resolver.GetService(serviceType);
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
return m_resolver.GetServices(serviceType);
}
}

方法 GetService 调用了下一个类型:IControllerFactoryIControllerActivatorHomeController 但不是我的 IRepository.

我做错了什么?为什么不为 IRepository 执行 DI?

最佳答案

您还需要实现一个 Controller 工厂。最简单的方法是子类化 DefaultControllerFactory .您可以使用 Castle Windsor 查看他们是如何做到的.然后告诉 ASP.NET MVC 使用你的实现。

DependencyResolver.SetResolver(newResolver);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);

关于c# - 依赖注入(inject)不知道我要注入(inject)的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577030/

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