相关疑难解决方法(0)

具有可选参数的PHP函数

我编写了一个可以接受10个参数的PHP函数,但只需要2个.有时,我想定义第八个参数,但我不想为每个参数输入空字符串,直到我达到第八个.

我的一个想法是传递带有参数数组的抽象函数,这些参数将它传递给实际函数.

有没有更好的方法来设置功能,所以我只能传入我想要的参数?

php function parameter-passing

94
推荐指数
7
解决办法
17万
查看次数

如何在ServiceStack.net中使用Funq注册多个IDbConnectionFactory实例

您将如何在Funq中注册不同的IDbConnectionFactory实例,然后直接在您的服务中访问它们?命名实例会以某种方式在这里发挥作用吗?

这是跨服务使用不同数据库时最好的方法吗?

谢谢!

编辑:

一个例子 ;).我可能会离开这里,因为我对IoC很新,但是比如说我有2个独立的数据库连接,我想注入.在ServiceStack中,这是在Global.asax中完成的.

container.Register<IDbConnectionFactory>(c =>
            new OrmLiteConnectionFactory(@"Connection String 1", SqlServerOrmLiteDialectProvider.Instance));                                             

container.Register<IDbConnectionFactory>(c =>
            new OrmLiteConnectionFactory(@"Connection String 2", SqlServerOrmLiteDialectProvider.Instance));                
Run Code Online (Sandbox Code Playgroud)

这两个似乎都注入了谦逊的海鲂.

然后通过以下方式在服务端自动访问它们:

public IDbConnectionFactory DbFactory { get; set; }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它似乎给了我第一个注册.如何访问服务端的特定访问权限?希望这会让它更加清晰.

这是ServiceStack.Examples的完整示例,仅使用1个IDbConnectionFactory: Movies Rest

c# ioc-container inversion-of-control servicestack funq

18
推荐指数
2
解决办法
7697
查看次数

我应该如何建模我的代码以在这种特定情况下最大化代码重用?

更新:请参阅问题的结尾,了解我如何实施解决方案.

抱歉这个措辞不好的问题,但我不确定如何最好地问它.我不确定如何设计一个可以重复使用的解决方案,其中大多数代码在每次实现时完全相同,但实现的一部分将每次都改变,但遵循类似的模式.我试图避免复制和粘贴代码.

我们有一个内部数据消息系统,用于在不同机器上跨数据库更新表.我们正在扩展我们的消息服务以向外部供应商发送数据,我想编写一个简单的解决方案,如果我们决定向多个供应商发送数据,可以重复使用.代码将被编译为EXE并定期运行以将消息发送到供应商的数据服务.

以下是代码的大致概述:

public class OutboxManager 
{
    private List<OutboxMsg> _OutboxMsgs;

    public void DistributeOutboxMessages()
    {
        try {
            RetrieveMessages();
            SendMessagesToVendor();
            MarkMessagesAsProcessed();
        }
        catch Exception ex {
            LogErrorMessageInDb(ex);
        }
    }

    private void RetrieveMessages() 
    {
      //retrieve messages from the database; poplate _OutboxMsgs.
      //This code stays the same in each implementation.
    }

    private void SendMessagesToVendor()   // <== THIS CODE CHANGES EACH IMPLEMENTATION
    {
      //vendor-specific code goes here.
      //This code is specific to each implementation.
    }

    private void MarkMessagesAsProcessed()
    {
      //If SendMessageToVendor() worked, run this …
Run Code Online (Sandbox Code Playgroud)

.net c# oop design-patterns

11
推荐指数
2
解决办法
435
查看次数

当类有外部依赖时,如何编写有效的单元测试?

我是测试驱动开发的新手,无法弄清楚如何为我编写的类编写有效的测试.该类如下(Java):

public class MyServiceClassImpl implements MyService {
    private someExternalClient client;
    private anotherExternalClient anotherClient;

    public MyServiceClassImpl() {
        client = someExternalClient.getInstance();
        anotherClient = anotherExternalClient(client);
    }

    public String methodWhichDoesSomething(String query) {
        return anotherClient.getResponse(query);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于测试,我尝试了几个查询,并将我得到的响应与我期望的响应进行比较(我期待它,因为我知道anotherClient将返回什么).它工作正常但这在技术上是一个集成测试,因为我调用外部依赖.在这种情况下,我不明白如何编写"单元"测试.更具体地说,我不知道如何模拟依赖项,因为字段是私有的,没有setter,构造函数不接受任何参数.即使我创建了它们,我如何用我的模拟"提供"类的实例?我自己也写了这个课程,所以请告诉我是否应该重新设计课程,或者提供入门者和制定者?

junit integration-testing unit-testing easymock mocking

3
推荐指数
1
解决办法
3274
查看次数