У вас есть несколько вариантов здесь:
1)
public class BaseManager
{
protected IRepository repository;
public BaseManager(IRepository _repository)
{
repository = _repository
}
// Some shared methods among manager classes.
}
Для этого необходимо создать экземпляр BaseManager, используя
IoCLocator.Resolve<BaseManager>();
или что-то в этом роде, в зависимости от конкретного IoCLocator
(MEF, Unity, Ninject или что вы используете)
2)
Почти то же самое:
public class BaseManager
{
protected IRepository repository;
public BaseManager(IoCLocator locator)
{
repository = locator.Resolve<IRepository>();
}
// Some shared methods among manager classes.
}
3) Или ввести свойство напрямую
public class BaseManager
{
[InjectFromContainer]
protected IRepository repository {get;set;}
public BaseManager()
{
repository = locator.Resolve<IRepository>();
}
// Some shared methods among manager classes.
}
Я не могу точно назвать нужный вам Атрибут, потому что он зависит от вашего контейнера.
В любом случае вам придется создать экземпляр контейнера IoC в BootStrapper, зарегистрировать в нем BaseManager
и затем разрешить его экземпляр из контейнера.
Надеюсь, это поможет, Илья
UPDATE:
Ваша концепция - просто беспорядок. Статические классы, которые вы хотите унаследовать, контейнер IoC, работающий с основными классами приложений, является статическим. Я бы порекомендовал вам выбрать один из них, и проблема исчезнет сама собой.