在Unity中按名称注册参数

时间:2010-08-27 02:01:56

标签: unity-container

使用Unity,是否可以按名称注册参数?我的用例如下。我想注册名为“asOfDate”的DateTime类型的值,这样对于任何依赖于DateTime且具有名为“asOfDate”的构造函数参数的类型,Unity将提供DateTime的实例等于注册值

1 个答案:

答案 0 :(得分:1)

不,这不是开箱即用的。 Unity不依赖于参数名称。因此,当任何类需要DateTime作为constructor-parameter时,Unity容器将使用已注册的容器,而不管参数名称如何。

要仅为某些类型注入特殊的DateTime和其他DateTime.Now,您必须以通常的方式注册公共DateTime:

container.RegisterType<DateTime>();

特殊对象必须使用名称注册:

container.RegisterInstance<DateTime>("special", DateTime.Now);

现在,如果要在解析对象时使用特殊的DateTime实例,可以按如下方式注册该对象:

container.RegisterType<IMyType, MyType>(
    new InjectionConstructor(new ResolvedParameter<DateTime>("special"));