我有以下代码:
Unity Container:
Settings settings = CreateSettings();
container.RegisterInstance(settings)
.RegisterType<MyHttpHandler>(new InjectionProperty[]
{
// How do I tell Unity to inject my settings created above?
new InjectionProperty("Settings", new ResolvedParameter(????))
});
MyHttpHandler:
public class MyHttpHandler: IHttpHandler
{
public MyHttpHandler()
{
IoC.Inject(this);
}
public Settings Settings
{
get;
set;
}
}
如何告诉Unity注入设置?这适用于接口,但不知道如何继续。
感谢任何帮助。
答案 0 :(得分:0)
它只是类型。您已经为Settings类注册了一个实例,因此您只需要告诉它注入该类型:
container.RegisterInstance(settings)
.RegisterType<MyHttpHandler>(
new InjectionProperty("Settings", new ResolvedParameter<Settings>());
(注意,您不需要额外的数组,RegisterType采用可变参数列表。)
由于这是一个常见的要求,因此您可以使用短缺。首先,如果您正在解析依赖项而您只需要默认(非命名)注册,则不需要使用ResovledParameter,您只需传递类型对象:
container.RegisterType(settings)
.RegisterType<MyHttpHandler>(
new InjectionProperty("Settings", typeof(Settings));
但是,我们也可以比这更简单。如果您使用基于类型的属性的默认值,则根本不需要传递值 - 容器将只使用属性的类型。所以你可以说:
container.RegisterType(settings)
.RegisterType<MyHttpHandler>(
new InjectionProperty("Settings"));
并且容器会弄明白。