使用Unity,是否可以按名称注册参数?我的用例如下。我想注册名为“asOfDate”的DateTime类型的值,这样对于任何依赖于DateTime且具有名为“asOfDate”的构造函数参数的类型,Unity将提供DateTime的实例等于注册值
答案 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"));