1
我有一個有一定財產注入這樣的類:Servicestack - 注射類具有構造
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 - Dependency seem's to not be Injected?
我需要構造移動到Apphost.config() 我的問題是,我如何移出這個類的構造函數爲apphost.config()? 以及如果我有很多這樣的課程,該如何管理?
另一個答案是關於在AppHost.Configure()方法中設置注入的依賴關係。我從來沒有使用過ServiceStack,但它看起來像非常標準的依賴關係初始化。如果可能的話,你想要做的是使用構造器注入。但是在構造函數中使用類似的其他類似乎你可能想要重新考慮設計。 – crad
其實我在談論配置(並且謝謝btw,我編輯了我的問題並添加了配置)。實際上,我已經考慮過構造函數注入(並嘗試過),但問題是,BaseRepository類有一些通常由IoC注入的依賴項,並且如果IoC未初始化,那麼它將不會被注入。 – reptildarat
這不應該是你的問題。只要確保先註冊存儲庫的依賴關係。 AppHost.Configure()應該在您首次使用存儲庫之前運行。如果你有循環依賴,你需要調整你的設計。 – crad