cga*_*kel 3 inversion-of-control c#-4.0 light-inject
使用 LightInject,假设我有一个要注册多个构造函数参数的服务,例如:
container.Register<double, bool, string, IFoo<String>>(
(factory, arg1, arg2, arg3) => new Foo<String>(arg1, arg2, arg3));
Run Code Online (Sandbox Code Playgroud)
我正在努力弄清楚如何在注册期间指定 ILifetime 实例。使用简单的注册,我可以为一个简单的注册设置 ILifetime,如下所示:
container.Register<IFoo, Foo>(new PerRequestLifeTime());
Run Code Online (Sandbox Code Playgroud)
似乎所有使用工厂的 Register 方法都假定瞬态对象。
我可以为参数创建另一个接口并注册它,但我不想为每个在构造函数中使用多个参数的实例创建新的东西。
那么,如何注册一个工厂和一个生命周期的服务呢?
我承认我对 IoC/DI 有点陌生,所以这可能只是因为我误解了如何正确完成这项任务,我相信还有另一种方法可以做到这一点。
我是 LightInject 的作者,我可以告诉你,在你实际在服务请求期间传递 inn 参数的情况下,除了瞬态生命周期之外,它对任何其他生命周期都没有真正意义。
由于您创建了一个需要解析时间参数的服务,因此您可能需要一个新的服务实例。
对于不需要解析时间参数的服务,您可以组合工厂委托和所需的生命周期。
希望这可以帮助
此致
伯恩哈德·里希特