Я думаю, что я действительно смущен тем, что я могу сделать с 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>
, поэтому это приводит к "I Base"
3. vBuilder.RegisterGeneric(typeof(PersonHandler<FakePerson>)).As(typeof(PersonHandler<PersonBase>));
Это дает ошибку, говорящую, что PersonHandler<FakePerson>
не является открытым типом
Так что теперь я гоняюсь за своим рассказом весь деньи, честно говоря, это становится утомительным,
ПОЖАЛУЙСТА, ПОМОГИТЕ