【问题标题】:Convert LightInject code to Dotnetcore DI将 LightInject 代码转换为 Dotnetcore DI
【发布时间】:2019-08-12 07:12:26
【问题描述】:

我必须创建一些带有按需控制的对象来刷新它。

我在 LightInject 中有代码

    public Lifetime()
    {
        lifetimes = new List<Flushable>();
    }

    public Lifetime Create()
    {
        var lifetime = new Flushable();
        lifetimes.Add(lifetime);
        return lifetime;
    }

    public void Flush()
    {
        foreach (var lifetime in lifetimes)
        {
            lifetime.Flush();
        }
    }

在 DI 代码中

var life = new Lifetime();
container.RegisterInstance<ILifetime>(life);
container.Register<SomeCache>(life.Create());

我想把上面的代码移到.net core DI

.netcore Di 有可能吗

【问题讨论】:

  • 您已经用相同的标题询问了a question。试着让你的问题的标题更具体。

标签: c# asp.net-core dependency-injection


【解决方案1】:

是的,这是可能的!

var services = new ServiceCollection();
services.AddSingleton<ILifetime, Lifetime>();
services.AddSingleton<SomeCache>(sp => {
   var lifetime = sp.GetRequiredService<ILifetime>();
   return lifetime.Create();
});  // or what ever scope u need

var serviceProvider = services.BuildServiceProvider();
var cache = serviceProvider.GetRequiredService<SomeCache>();

您可能想要调整SomeCache 的范围。使用 MS-DI Container,您可以在 SingletonTransientScoped 之间进行选择。您可以找到概览here

【讨论】:

  • 感谢您的回答。它不会像我预期的那样工作。因为 SomeCache 在其构造函数中不接受任何参数。
  • 我看错了。 SomeCache 实现 ILifetime?请提供SomeCache的代码,以便我可以相应地更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2017-09-23
  • 2012-04-25
  • 2018-11-05
  • 2013-10-24
  • 2020-07-26
相关资源
最近更新 更多