我是新來的簡單噴油器。我有依賴於強制客戶端的數據訪問層。我已經註冊了ForceClient
依賴項。一旦用戶登錄到應用程序,我想要替換默認值ForceClient
。如何使用簡單的噴油器在運行時改變依賴關係
請讓我知道,我如何在運行時更改默認值。
Ioc.ServiceContainer.Register(() => new ForceClient(
"test",
"test",
"test"));
這是關於要求的完整細節。我在我們的Xamarin項目中使用了DAL,可以使用Developerforce.Force API從銷售人員那裏檢索數據。我正在使用MOQ編寫單元測試用例來測試DAL。
DAL代碼。
public CustomerRepository(IForceClient client)
{
_client = client;
}
public async Task<long> GetTotalContacts()
{
string totalContactCountQry = "some query"
var customerCount = await _client.QueryAsync<ContactsTotal>(totalContactCountQry);
var firstOrDefault = customerCount.Records.FirstOrDefault();
return firstOrDefault != null ? firstOrDefault.Total : 0;
}
單元測試用例代碼。在應用程序初始化
container.Register<IForceClient>((() => new ForceClient(
UserState.Current.ApiBaseUrl,
UserState.Current.AuthToken.AccessToken,
UserState.Current.ApiVersion)), Lifestyle.Transient);
ForceClient的註冊過程中,我創建實例
[SetUp]
public void Init()
{
forceClientMock = new Mock<IForceClient>();
forceClientMock.Setup(x => x.ForceClient(It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<string>(), It.IsAny<HttpClient>()))
.Return(new ForceClient(It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>(), It.IsAny<HttpClient>()));
forceClientMock.Setup(x => x.QueryAsync<ContactsTotal>(It.IsAny<string>()))
.ReturnsAsync(new QueryResult<ContactsTotal>());
forceClientMock.Setup(x => x.QueryAsync<ContactsTotal>(It.IsAny<string>()))
.ReturnsAsync(new QueryResult<ContactsTotal>() { Records=new List<ContactsTotal>() });
}
[Test]
public void GetTotalContacts()
{
ICustomerRepository customerRepostory = new CustomerRepository(forceClientMock.Object);
Assert.AreEqual(customerRepostory.GetTotalContacts().Result,0);
}
簡單的噴油器註冊使用全部默認值UserState的創建。一旦用戶登錄到應用程序,實際值就會被分配。
我除了ForceClient例如有登錄後更新的值來訪問銷售隊伍來檢索數據,但該方案是給下面一行DAL錯誤
var customerCount = await _client.QueryAsync<ContactsTotal>(totalContactCountQry);
的原因是forceClient還包含默認值。我如何確保在登錄後創建FoceClient實例以使用UserState的實際值
我不知道我理解你試着做什麼和什麼你的問題是。您的委託註冊已經允許ForceClient被'替換',因爲每個解決方案(瞬態)都會注入一個新實例。 – Steven
我與container.Register嘗試這((()=>新ForceClient( UserState.Current.ApiBaseUrl, UserState.Current.AuthToken.AccessToken, UserState.Current.ApiVersion)),Lifestyle.Transient) ; –
Rajalbar
它不會在運行時更新ForceClient實例。我正在註冊對應用程序初始化的依賴。在應用程序初始化時,UserState.Current對象具有默認值,一旦用戶登錄到應用程序,這些值將取代實際用戶登錄詳細信息。 – Rajalbar