在传递构造函数参数时,在LightInject中注册服务时指定生命周期?

时间:2014-03-28 19:46:04

标签: c#-4.0 inversion-of-control light-inject

使用LightInject,假设我有一个我想要注册多个构造函数参数的服务,例如:

container.Register<double, bool, string, IFoo<String>>(
    (factory, arg1, arg2, arg3) => new Foo<String>(arg1, arg2, arg3));

我正在努力弄清楚如何在注册期间指定ILifetime实例。使用简单的注册我可以设置ILifetime进行简单的注册,如下所示:

container.Register<IFoo, Foo>(new PerRequestLifeTime());

似乎所有使用工厂的Register方法都假定为临时对象。

我可以为参数创建另一个接口并注册它,但是我不想为每个我在构造函数中使用多个参数的单个实例创建新的东西。

那么,我如何在工厂和终身注册服务?

我承认我对IoC / DI有些新意,所以这可能只是因为我误解了如何正确地完成这项任务,我相信还有另一种方法可以做到这一点。

2 个答案:

答案 0 :(得分:3)

我是LightInject的作者,我可以告诉你,如果你在服务请求期间实际传递了inn参数,那么除了瞬态生命周期之外的任何其他生命周期都没有意义。

由于您创建了一个需要解析时参数的服务,因此您可能需要一个新的服务实例。

对于不需要解析时参数的服务,您可以组合工厂委托和期望的生命周期。

希望这有帮助

祝你好运

Bernhard Richter

答案 1 :(得分:0)

你可以注册这样的东西。

container.Register<IFoo<String>>(factory => new Foo<String>(arg1, arg2, arg3), new PerRequestLifeTime());