我一直在通过Ninject做很多关于依赖注入的阅读和教程,希望能够将我的一个应用程序重新分解,以便将来更加灵活和可扩展。我的网络应用程序构建在API之上,使我可以访问后端基础架构。
我正在努力澄清的部分技术债务是我必须进行的每个API调用所带来的重复代码。 API有大约45-50种方法来获取和管理不同的实体。
以下(大大简化)代码示例说明了在我的代码中找到无处不在的重复模式。 Ninject / DI能帮助我更轻松吗?
namespace MyApp
{
public class example
{
public static WebAccount Fetch_Account(Guid accountID)
{
//Create instance of API, request and response objects
WebAPI api = new WebAPI();
Fetch_Account_Request accountRequest = new Fetch_Account_Request();
Fetch_Account_Response accountResponse = new Fetch_Account_Response();
//Api call security signature
ApiSecuritySignature signature = new ApiSecuritySignature(/*My API ID */, /*My API Key */);
accountRequest.API_ID = /* My API ID */;
accountRequest.Token = signature.Token;
accountRequest.TimeStamp = signature.Date;
//Id of the account to be fetched
accountRequest.Account_ID = accountID;
//Fetch the account
accountResponse = api.Fetch_Account(accountRequest);
return accountResponse.Account;
}
public static void Manage_Account(WebAccount account)
{
//Create instance of API, request and response objects
WebAPI api = new WebAPI();
Manage_Account_Request manageAccountRequest = new Manage_Account_Request();
Manage_Account_Response manageAccountResponse = new Manage_Account_Response();
//Api call security signature
ApiSecuritySignature signature = new ApiSecuritySignature(/*My API ID */, /*My API Key */);
manageAccountRequest.API_ID = /* My API ID */;
manageAccountRequest.Token = signature.Token;
manageAccountRequest.TimeStamp = signature.Date;
//account to modify
manageAccountRequest.Account_ID = account.Account_ID;
//set Account properties
manageAccountRequest.Email = account.Email;
manageAccountRequest.Address_1 = account.Address_1;
manageAccountRequest.City = account.Postal_Zip;
manageAccountRequest.Postal_Zip = account.Postal_Zip;
manageAccountRequest.Country = account.Country;
manageAccountRequest.State = account.State;
//Make the call
manageAccountResponse = api.Manage_Account(manageAccountRequest);
}
}
}
应该注意的是,我无法访问所有请求和响应对象的代码,它们是我引用的共享库的一部分。
答案 0 :(得分:2)
是的,您可以创建工厂以创建类型示例类。尝试通过在单个位置声明该依赖项来尊重组合根模式。你显然需要很多Managerxxx类。你可以声明它们是'example'类的构造函数参数,ninject将使用可能的递归依赖创建它们。