gpt4 book ai didi

c# - 通过 Controller Factory 注入(inject)实例

转载 作者:行者123 更新时间:2023-11-30 16:58:20 24 4
gpt4 key购买 nike

我正在学习依赖注入(inject),我需要一些帮助来更好地理解 Controller 工厂。

enter image description here

我需要通过 Constructor InjectionHomeController 中注入(inject) SqlReceitaRepository

HomeController 构造函数

private readonly IReceitaRepository repositorio;

public HomeController(IReceitaRepository repositorio)
{
if (repositorio == null)
throw new ArgumentException("repositorio");

this.repositorio = repositorio;
}

SqlReceitaRepository 实现后,我现在可以设置 ASP.NET MVC 来注入(inject)它的一个实例到 HomeController 的实例中,但我该怎么做呢?

详细信息:我正在使用 NHibernate 而不是 Entity Framework。

如果需要,为此创建的类将属于哪一层?

我读了一些文章,发现我需要在我的 Global.asax 中换行

Global.asax

var controllerFactory = new ReceitaControllerFactory();
ControllerBuilder.Current.SetControllerFactory(controllerFactory);

我假设 ReceitaControllerFactory 应该包含 IControllerFactory 实现。

但是看IControllerFactory

public interface IControllerFactory
{
IController CreateController(RequestContext requestContext, string controllerName);
SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName);
void ReleaseController(IController controller);
}

我们可以看到 CreateController 方法,但是如何将 SqlReceitaRepository 的实例注入(inject)到 HomeController 的实例中呢?

最佳答案

简单的答案:

IController CreateController(RequestContext requestContext, string controllerName)
{
return new HomeController(new SqlReceitaRepository());
}

但是,正如您可能已经注意到的那样,这只适用于一种 Controller 类型,正如它所写的那样。更重要的是,它不是很容易维护。所以正确的答案是获得像 Ninject 这样流行的 DI 框架,并获得框架所需的插件(例如 Ninject MVC),然后定义绑定(bind)并让框架负责计算排除依赖项:

Bind<IReceitaRepository>().To<SqlReceitaRepository>();

关于c# - 通过 Controller Factory 注入(inject)实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25390600/

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