Служебный пакет - класс 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();
    }
}

Надеюсь, есть другой способ, но я могу думать только о решениях.

Другие вопросы по тегам