【发布时间】:2011-09-29 21:05:07
【问题描述】:
我想我真的很困惑我可以用 AutoFac 做什么,有人可以帮我走上正轨吗?
我有一个基本类型
class PersonBase{
public string SaySomething(){
return "I am base";
}
}
我派生出两个具体的类
class FakePerson : PersonBase{
public override string SaySomething(){
return "I'm so Fake";
}
}
class RealPerson : PersonBase{
public override string SaySomething(){
return "I am For Real";
}
}
创建一个泛型类PersonHandler来处理不同类型的人,并希望PersonHandler在适当的时候实例化这个人,所以我不想注入Person的实例,只需要派生类型
class PersonHandler<T>
where T : PersonBase, new() {
T _Person;
public DoWork(){
_Person = new T();
_Person.SaySomething();
}
}
现在我尝试使用处理程序,在注册了接下来详述的类型后,结果各不相同。
var ph = contrainer.Resolve<PersonHandler<PersonBase>>();
ph.DoWork();
我尝试注册类型如下
1. vBuilder.RegisterType<PersonHandler<FakePerson>>().As<PersonHandler<PersonBase>>();
这给了我一个错误,指出 PersonHandler<FakePerson> 不能分配给 PersonHandler<PersonBase>(或者相反,我不记得哪个)
2. vBuilder.RegisterGeneric<typeof(PersonHandler<>)>
vBuilder.RegisterType<FakePerson>().As<PersonBase>();
这不会将PersonBase 解析为FakePerson,而只是给出PersonHandler<PersonBase>,所以它会导致“我是基地”
3. vBuilder.RegisterGeneric(typeof(PersonHandler<FakePerson>)).As(typeof(PersonHandler<PersonBase>));
这给出了一个错误,指出PersonHandler<FakePerson> 不是开放类型
所以现在我整天都在追逐我的故事,坦率地说,它变得乏味了,
请帮忙
【问题讨论】:
标签: generics dependency-injection autofac