Служебный пакет - класс Inject, у которого есть конструктор
У меня есть класс, который имеет некоторые свойства инъекции, как это:
public class MyRepository
{
public IBaseRepository BaseRepository { get; set; } //Injected By IoC
public IUid Uid { get; set; } // Injected By IoC
private static AnotherClass _anotherClass;
public MyRepository()
{
_anotherClass = BaseRepository.Db.SingleOrDefault<AnotherClass>();
//another logic in here....
}
public string MethodUsingUid()
{
return Uid.SomeMethodHere(_anotherClass);
}
}
И используется такими сервисами:
public class TheServices : Service
{
public MyRepository Repo { get; set; }
public object Post(some_Dto dto)
{
return Repo.MethodUsingUid();
}
}
И мой Apphost.configuration выглядит так:
container.Register<IDbConnectionFactory>(conn);
container.Register<IBaseRepository>(c => new BaseRepository(){ DbFactory = c.Resolve<IDbConnectionFactory>()}).ReusedWithin(ReuseScope.Request);
container.Register(
c => new MyRepository() { BaseRepository = c.TryResolve<IBaseRepository>(), Uid = c.TryResolve<Uid>() });
container.RegisterAutoWired<Uid>().ReusedWithin(ReuseScope.Request);
Я знаю, что он не будет введен, потому что он будет создан до того, как у funq появятся шансы на внедрение и согласно этому ответу: ServiceStack - Кажется, что зависимость не вводится?
Мне нужно переместить конструктор в Apphost.config() Мой вопрос заключается в том, как я перемещаю этот конструктор класса в apphost.config()? и как это сделать, если у меня много таких классов?
1 ответ
Итак, прошло некоторое время, когда я создавал свои вопросы, я решил это путем перехода от внедрения свойства к внедрению конструктора следующим образом:
public class MyRepository
{
private static AnotherClass _anotherClass;
private readonly IBaseRepository _baseRepository;
private readonly IUid _uid;
public MyRepository(IBaseRepository _baseRepository, IUid uid)
{
_baseRepository = baseRepository;
_uid = uid;
_anotherClass = BaseRepository.Db.SingleOrDefault<AnotherClass>();
//another logic in here....
}
public string MethodUsingUid()
{
return _uid.SomeMethodHere(_anotherClass);
}
}
И я перемещаю инъекцию в Сервис:
public class TheServices : Service
{
public IBaseRepository BaseRepository { get; set; } //Injected By IoC
public IUid Uid { get; set; } // Injected By IoC
public object Post(some_Dto dto)
{
var Repo= new MyRepository(BaseRepository, Uid);
return Repo.MethodUsingUid();
}
}
Надеюсь, есть другой способ, но я могу думать только о решениях.