“全球”解决服务不再需要注入资产

时间:2019-01-05 18:52:07

标签: c# inversion-of-control castle-windsor aspnetboilerplate

在我的名为“ Ks”的mvc项目的ASP样板中

调用webapi,ioc将KsSession解析为派生类的相关实例,如here

但是,当我尝试解决一个名为MobileUserService的服务而不注入但“全局”地服务时,问题就开始了,如下所示。 从第二次调用开始,KsSession不再解析。 发生了从构造函数到NullKsSession的属性集调用,但是没有更多的属性注入。

Global.asax中:

protected override void Application_BeginRequest(object sender, EventArgs e)
{
    base.Application_BeginRequest(sender, e);
    var service = Ks.Dependency.IocManager.Instance.Resolve<Service.MobileUser.IMobileUserService>();
}

我的问题是为什么会这样,不是这样使用服务合适吗?

请注意,我在github issue中添加了很多详细信息,但这是正在发生的事情的简明版本。

1 个答案:

答案 0 :(得分:1)

看起来您应用了错误的做法。我将IMobileUserServie注册为单例。并正式解决。 无论如何,请尝试创建一个新的作用域并在自定义作用域中解析您的界面。虽然我不建议这样做,但是您可以使用以下代码

protected override void Application_BeginRequest(object sender, EventArgs e)
{
    base.Application_BeginRequest(sender, e);
    var iocResolver = Ks.Dependency.IocManager.Instance.Resolve<IIocResolver>();
    var scope = iocResolver.CreateScope();
    var service = scope.Resolve<Service.MobileUser.IMobileUserService>();
}