学习原则的依赖注入,适用于这种情况?

时间:2012-09-09 15:28:55

标签: c# .net dependency-injection ninject agile

我一直在通过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);
    }
}
}

应该注意的是,我无法访问所有请求和响应对象的代码,它们是我引用的共享库的一部分。

1 个答案:

答案 0 :(得分:2)

是的,您可以创建工厂以创建类型示例类。尝试通过在单个位置声明该依赖项来尊重组合根模式。你显然需要很多Managerxxx类。你可以声明它们是'example'类的构造函数参数,ninject将使用可能的递归依赖创建它们。

相关问题