我有一堂课(MyService
)具有静态属性(MyService.Context
)代表当前上下文(特定于当前登录的用户,因此它会发生变化)。
我想要实现的目标
ObjectFactory.Initialize(x =>
{
x.For<IMyService>().Use<MyInstance>(c => c.Use(MyService.Context));
});
IE。这样对于每一个ObjectFactory.GetInstance<IMyService>()
我得到一个参考MyService.Context
这可行吗?
UPDATE
我不能使用单例模式,因为MyService.Context
根据发出请求的用户(通过 HttpContext)而变化。
在上面的伪代码中 lambda 参数c
代表一个 SM 上下文,这样我就可以为每个请求返回一个自定义结果。我知道SM的Intercept()
但它被解雇了after对象被构造 - 不instead.
如果您可以使用房产,则可以添加OnCreation
方法。提供的操作在创建后立即针对实例执行:
ObjectFactory.Initialize(x =>
{
x.For<IMyService>()
.Use<MyInstance>()
.OnCreation(x => x.Context = MyService.Context;
});
或者您可以使用延迟初始化并提供Func
to the Use
每当需要新实例时执行的方法。这应该在正确的上下文中执行:
ObjectFactory.Initialize(x =>
{
x.For<IMyService>()
.Use<MyInstance>(() => new MyInstance(MyService.Context);
});
我希望其中一种方法对您有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)