gpt4 book ai didi

c# - 在 StructureMap 中注册一个默认实例

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

我有一个类( MyService ),它有一个静态属性( MyService.Context ),它表示当前上下文(特定于当前登录的用户,因此它会发生变化)。

我正在努力实现的目标

ObjectFactory.Initialize(x =>
{
x.For<IMyService>().Use<MyInstance>(c => c.Use(MyService.Context));
});

IE。这样对于每个 ObjectFactory.GetInstance<IMyService>()我得到了对 MyService.Context 的引用

那可行吗?

更新

我不能使用单例模式,因为 MyService.Context根据发出请求的用户(通过 HttpContext)而变化。

在上面的 lambda 参数伪代码中 c代表一个 SM 上下文,以便我可以为每个请求返回一个自定义结果。我知道 SM 的 Intercept()但它在对象被构造后被触发 - 而不是。

最佳答案

如果您可以使用属性,则可以添加 OnCreation方法。提供的 Action 在实例创建后立即执行:

ObjectFactory.Initialize(x =>
{
x.For<IMyService>()
.Use<MyInstance>()
.OnCreation(x => x.Context = MyService.Context;
});

或者您可以使用延迟初始化并提供 FuncUse每当需要新实例时执行的方法。这应该在正确的上下文中执行:
ObjectFactory.Initialize(x =>
{
x.For<IMyService>()
.Use<MyInstance>(() => new MyInstance(MyService.Context);
});

我希望其中一种方法对您有用。

关于c# - 在 StructureMap 中注册一个默认实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567757/

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