C++ [boost.di]唯一作用域有什么问题

C++ [boost.di]唯一作用域有什么问题,c++,boost,dependency-injection,C++,Boost,Dependency Injection,我开始使用boost.di,但不了解惟一范围。文件说: 表示唯一/每个请求值的范围。将创建一个新实例 提供每种时间类型的请求 #包括 #包括 名称空间di=boost::di; 类服务器{ 公众: }; int main() { di::Policys::constructible(); di::喷油器喷油器=di::制造喷油器(// di::bind().in(di::unique) ); std::shared_ptr server1=injector.create(); std::shar

我开始使用boost.di,但不了解惟一范围。文件说:

表示唯一/每个请求值的范围。将创建一个新实例 提供每种时间类型的请求

#包括
#包括
名称空间di=boost::di;
类服务器{
公众:
};
int main()
{
di::Policys::constructible();
di::喷油器喷油器=di::制造喷油器(//
di::bind().in(di::unique)
);
std::shared_ptr server1=injector.create();
std::shared_ptr server2=injector.create();
断言(server1!=server2);
}

我的断言失败了!为什么?

我真的相信你已经找到了这个问题的答案,但我在研究这个图书馆的时候,无意中发现你的问题没有答案,我认为其他人找到书面答案可能会有用

因此,关键点是di::make_喷油器的返回类型

如果您像下面的代码片段那样编写,您将看到请求自动与限制自动之间的区别

auto injector=di::make_injector(//
di::bind().in(di::unique)
);
标准::cout
#include <boost/di.hpp>
#include <assert.h>
namespace di = boost::di;

class server {
public:
};
int main()
{
    di::policies::constructible();
    di::injector<client> injector = di::make_injector(//<my_conf>
        di::bind<server>().in(di::unique)
    );
    std::shared_ptr<server> server1 = injector.create<std::shared_ptr<server>>();
    std::shared_ptr<server> server2 = injector.create<std::shared_ptr<server>>();
    assert(server1 != server2);
}