gpt4 book ai didi

asp.net-mvc-3 - 结构图初学者 |属性注入(inject)

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

这个问题的一部分已经在这里问过:structuremap Property Injection但从未给出答案。

使用 StructureMap,是否可以进行属性注入(inject),使得

class SomeController : Controller
{
public IService Service
{
get;
set;
}
}

被正确注入(inject)了吗?我是一个

最佳答案

StructureMap 支持 setter/property injection .因此,您可以执行以下操作:

public class SomeController : Controller
{
[SetterProperty]
public IService Service { get; set; }
}

进而:
ObjectFactory.Initialize(x =>
{
x.For<IService>()
.Use<ServiceImpl>();
});

或者,如果您不喜欢使用 StructureMap 特定属性使 Controller 困惑的想法,您可以像这样配置它:
ObjectFactory.Initialize(x =>
{
x.For<IService>()
.Use<ServiceImpl>();

x.ForConcreteType<SomeController>()
.Configure
.Setter<IService>(c => c.Service)
.IsTheDefault();
});

另请注意,属性注入(inject)适用于该属性的存在对于 Controller 的正确运行不是强制性的情况。例如考虑一个记录器。如果 Controller 的使用者没有将记录器的任何特定实现注入(inject)到属性中, Controller 仍然可以工作,只是它没有记录。在您的情况下,您正在使用服务,如果您的 Controller 操作依赖于该服务,我将使用构造函数注入(inject)。所以你应该问自己的问题是:如果这个属性是 null,当我调用它的某些操作时,我的 Controller 会崩溃吗? ?如果这个问题的答案是肯定的,那么我会推荐构造函数注入(inject)。此外,当您使用构造函数注入(inject)时,您会强制此 Controller 的使用者指定一个实现,因为如果没有在构造函数中传递适当的服务,他就无法获得 Controller 的实例。

关于asp.net-mvc-3 - 结构图初学者 |属性注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4979453/

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