我花了一些时间想知道是否可以编写一个guice模块,它本身是用类型T参数化的,并使用它的类型参数来指定绑定.
就像在这个(不工作)的例子中一样:
interface A<T> {}
class AImpl<T> implements A<T>{}
interface B<T> {}
class BImpl<T> implements B<T> {}
class MyModule<T> extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<A<T>>(){}).to(new TypeLiteral<AImpl<T>>(){});
bind(new TypeLiteral<B<T>>(){}).to(new TypeLiteral<BImpl<T>>(){});
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法,尝试将T传递给MyModule作为Class/TypeLiteral的实例,但它们都没有工作.帮助赞赏.
此致,ŁukaszOsipiuk
我是boost :: asio的新手,所以我的问题可能是愚蠢的 - 抱歉,如果是这样的话.我正在使用keepalive编写异步服务器应用程序(可以在单个连接上发送多个请求).
连接处理程序很简单:
在循环中:
使用socket-> async_read_some(buffer,handler)调度读取请求
来自处理程序计划使用async_write写入响应.
我面临的问题是当 传递给async_read_some的处理程序被io_service线程调用时,缓冲区实际上可能包含的数据多于单个请求(例如客户端发送的下一个请求的一部分).
我不想(并且不能,如果它只是请求的一部分)此时处理剩余的字节.处理完之前的请求后我想这样做.
如果我有可能将不必要的重新映射数据重新插入套接字,那么很容易解决这个问题.所以它在下一次async_read_some调用时处理.
boost :: asio中是否存在这样的可能性,或者我是否必须将剩余的数据存储在一边,并使用额外的代码自行处理.