以下代码段声明了两个具有共同依赖关系的 google/wire 初始化程序。强制只创建一个配置实例的最佳方法是什么?
我可以将共享依赖项向下传递给 InitializeStorageHandler 函数,但如果我的理解是正确的,那将破坏 DI 的目的。
当然,我也可以使用单例模式。我不确定这是否是做事的“Go-Way”。有最佳实践吗?
package api
import (
"../storage"
"../config"
"github.com/google/wire"
)
func InitializeServer() (*Server, error) {
panic(wire.Build(config.NewConfiguration, NewServer))
}
func InitializeStorageHandler() *StorageHandler {
panic(wire.Build(config.NewConfiguration, storage.NewStorage, storage.NewService, NewStorageHandler))
}
最佳答案
Of course, I could also use the Singleton pattern
这与 wire 一致,如 issue 77 ,其中提到“Wire 非常适合提供单例”。
如 issue 21 中所述:
Wire intentionally does not have a notion of subcomponents at the moment.
In talking with the Dagger team, we discovered that subcomponents and scopes introduce a fair amount of complexity.As you say, you can get much the same behavior by returning the singletons from the first injector that creates them and then pass them to later injectors. This has the benefit of making the dataflow explicit, which for the examples we came up with, seemed like a net win.
That said, we're very curious to see how folks will use Wire in real-world applications: if this does not scale, we might have to revisit.I realized after looking more closely at your sample that the component itself is stateful (a detail I had forgotten about Dagger). My explanation above is still largely applicable: we want state to be explicit.
在这种情况下,从 How singleton pattern works with Golang 中检查“Jefferson Otoni Lima ” : sync.Once或 init() function可以帮助在“Go-way”中安全地构建单例。
关于谷歌/电线 : Is this a use case for the Singleton pattern?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963188/
如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail
我正在尝试从googleAPI下载client_secret.json。我正在执行https://developers.google.com/gmail/api/quickstart/ruby中列出的步骤.使用此向导在GoogleDevelopersConsole中创建或选择项目并自动启用API。在左侧边栏中,选择同意屏幕。选择电子邮件地址并输入产品名称(如果尚未设置),然后单击“保存”按钮。在左侧边栏中,选择凭据并点击创建新客户端ID。选择应用程序类型已安装应用程序,已安装应用程序类型为其他,然后单击“创建客户端ID”按钮。点击新客户端ID下的下载JSON按钮。将此文件移动到您的工作
我想用Ruby编写脚本(使用gdatagem、rest-clientgem或直接使用Net::HTTP)使用gmail-userid/password对我的google文档进行身份验证,然后下载私有(private)列表文件和文件。GDatadocuments指南清楚地说明了如何获取公开可见的文档,但不清楚我如何在我的脚本中验证自己的身份以访问私有(private)文档。authenticationmethodstheyspecify所有这些似乎都需要人工干预,要么使用验证码,要么使用某种形式的OAuth/OpenID重定向。有什么方法可以只使用用户名/密码组合来访问我的私有(priv
我想在google上获取特定关键字搜索的所有搜索结果。我已经看到了抓取的建议,但这似乎是个坏主意。我见过Gems(我计划使用ruby)进行抓取并使用API。我还看到了使用API的建议。有谁知道现在最好的方法吗?API不再受支持,我看到有人报告说他们取回了无法使用的数据。Gems是否有助于解决这个问题?提前致谢。 最佳答案 我也选择了抓取选项,它比向谷歌询问key和加号更快,而且您每天的搜索查询不限于100次。正如理查德指出的那样,谷歌的服务条款是一个问题。这是我做过的一个对我有用的例子——如果你想通过代理连接,它也很有用:req
我正在使用apneadiving/Google-Maps-for-Rails添加googlemaps支持(感谢awesomegem)但是,我发现了一个小故障,这很可能是我的错。当有多个标记时,auto_zoom效果很好。但是,当只有一个标记时,它会放大到不漂亮的最大级别。“缩放”仅在auto_zoom为false时有效,所以这不是我想要的。因此您可以使用“maxZoom”,但现在用户无法手动放大超出该点,这不是我想要的。有解决办法吗?我的解释有道理吗?这是GoogleMapsAPI的限制吗?谢谢... 最佳答案 此行为是由于goog
我想抓取私有(private)谷歌群组的讨论列表。这是一个多页列表,稍后我可能不得不再次这样做,所以编写脚本听起来是个不错的选择。由于这是一个私有(private)群组,我需要先登录我的谷歌帐户。不幸的是,我无法使用wget或rubyNet::HTTP登录。令人惊讶的是,使用ClientLogininterface无法访问谷歌群组,所以所有的代码示例都是无用的。我的ruby脚本嵌入在帖子的末尾。身份验证查询的响应是200-OK,但响应header中没有cookie,正文包含消息“您的浏览器的cookie功能已关闭。请将其打开。”我得到了与wget相同的输出。请参阅此消息末尾的b
我想问一下,将googlemaps集成到rubyonrails应用程序中的最佳解决方案是什么。某个特定的gem值得吗?还是我们应该为它写下我们自己的观点?感谢任何输入。 最佳答案 仅供引用,我已经完成了gmaps4rails的稳定版本。参见:https://github.com/apneadiving/Google-Maps-for-Rails 关于ruby-on-rails-用于谷歌地图集成的RubyonRailsgem,我们在StackOverflow上找到一个类似的问题:
我想知道在Rails4中实现GoogleAnalytics跟踪代码和turbo链接的最佳方式是什么。正常的代码段是否有效?我也看过agems为此,但我不确定它的作用。 最佳答案 我喜欢vladCovaliov的解决方案,因为它似乎大多数新帐户都默认使用UniversalAnalytics(我认为这也更好)。但是,我认为这个答案需要与注释掉初始网页浏览量的其他建议相结合,使用page:change事件,并跟踪浏览量,而不是事件。例如,在您的:(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObje
我无法为我的MaterialGoogle折线图创建对数垂直轴。文档指出我应该在选项中将vAxis.logScale设置为true,但这不会导致任何结果。目前我的测试是:google.charts.load("current",{"packages":["line","corechart"]});google.charts.setOnLoadCallback(function(){vardata=newgoogle.visualization.DataTable();data.addColumn("date","Date");data.addColumn("number","1");da
我已经尝试了下面的代码,它工作正常。但是我需要将这些注册详细信息存储在用户池中(另外我还想添加一些自定义属性)。但是我没有找到合适的方法来做到这一点。functionsigninCallback(authResult){ AWS.config.region='us-XXXXXXX-1';//AddtheGoogleaccesstokentotheCognitocredentialsloginmap.AWS.config.credentials=newAWS.CognitoIdentityCredentials({IdentityPoolId:'us-XXXX-1:XXXXXXXXX