我编写了一个可以接受10个参数的PHP函数,但只需要2个.有时,我想定义第八个参数,但我不想为每个参数输入空字符串,直到我达到第八个.
我的一个想法是传递带有参数数组的抽象函数,这些参数将它传递给实际函数.
有没有更好的方法来设置功能,所以我只能传入我想要的参数?
您将如何在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
更新:请参阅问题的结尾,了解我如何实施解决方案.
抱歉这个措辞不好的问题,但我不确定如何最好地问它.我不确定如何设计一个可以重复使用的解决方案,其中大多数代码在每次实现时完全相同,但实现的一部分将每次都改变,但遵循类似的模式.我试图避免复制和粘贴代码.
我们有一个内部数据消息系统,用于在不同机器上跨数据库更新表.我们正在扩展我们的消息服务以向外部供应商发送数据,我想编写一个简单的解决方案,如果我们决定向多个供应商发送数据,可以重复使用.代码将被编译为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) 我是测试驱动开发的新手,无法弄清楚如何为我编写的类编写有效的测试.该类如下(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,构造函数不接受任何参数.即使我创建了它们,我如何用我的模拟"提供"类的实例?我自己也写了这个课程,所以请告诉我是否应该重新设计课程,或者提供入门者和制定者?