gpt4 book ai didi

StructureMap AlwaysUnique 似乎不适用于构造函数注入(inject)

转载 作者:行者123 更新时间:2023-12-03 09:25:54 24 4
gpt4 key购买 nike

我的 GeneralRegistry 中有这个配置:

ForRequestedType<IClientBonusHistoryLoadTask>().AlwaysUnique().TheDefaultIsConcreteType<ClientBonusHistoryLoadTask>();

我有这个代码:
public ClientAdvantagesUpdateTask(IBaseRepo<Client> repository, INHUnitOfWorkProvider uowProvider, IClientBonusHistoryLoadTask clientBonusHistoryLoadTask, ClientBonusHistoryLoadTask masterClientBonusHistoryLoadTask) : base(repository, uowProvider)
{
_clientBonusHistoryLoadTask = clientBonusHistoryLoadTask;
_masterClientBonusHistoryLoadTask =
masterClientBonusHistoryLoadTask;

bool y = clientBonusHistoryLoadTask.Equals
(masterClientBonusHistoryLoadTask);

var task = ObjectFactory.GetInstance<IClientBonusHistoryLoadTask>
();
var task2 =
ObjectFactory.GetInstance<IClientBonusHistoryLoadTask>();

bool x = task.Equals(task2);
}

出于某种原因,y 为真(这是问题所在)而 x 为假
(按预期工作)。这是一个错误,还是我在做什么
错误的?

最佳答案

嗨,我有同样的问题,总是独一无二的并不是让它总是独一无二的。
但是几乎没有文档知道它应该做什么。
我使用以下内容:

For<ILeadRepository>().Use<LeadRepository>();

然后在对象工厂方法中:
LeadRepository instance = ioc.GetInstance<LeadRepository>();
ioc.Inject(typeof(ILeadRepository), instance);
ioc.Inject(typeof(LeadRepository), instance);

其中 ioc 是 IContainer .
同样,我不确定 Inject 是否应该这样使用,但这总是一样的
运行注入(inject)代码后,将 LeadRepository 实例从 ioc 容器中取出。
希望这会有所帮助,或者有人可以发布应该如何完成的信息。
我不喜欢使用静态工厂或静态方法,所以我创建了自己的工厂,并且该工厂内的所有内容都使用上面的代码从 ioc 容器中提取出唯一的实例。

假设您想要一个唯一的实例,即每个工厂一个单例。
并且您总是希望返回相同的实例。我找到了一种更好的方法,那就是在工厂中使用子容器:

例如
myParentContainer = new Container(x => { 
x.AddRegistry<ObjectFactoryModelRegistry>();
x.AddRegistry<ServiceRegistry>();
});

myIoc = myParentContainer.GetNestedContainer();
myIoc.AssertConfigurationIsValid();

然后可以使用以下代码获取相同的实例:
myIoc.GetInstance<T>;

关于StructureMap AlwaysUnique 似乎不适用于构造函数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318299/

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