我有这个构造函数:
public GroupController(IUserService userService, IGroupService groupService)
{
_groupService = groupService;
_userService = userService;
}
userService和groupService在构造函数中具有相同的对象:
public UserService(IDb db)
{
_db = db;
}
public GroupService(IDb db)
{
_db = db;
}
我的容器是这样的:
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
x.For<IDb>().Use<Db>();
x.For<IUserService>().Use<UserService>();
x.For<IGroupService>().Use<GroupService>();
});
那么,我如何为UserService注入IDb,为GroupService注入另一个IDb,因为我不能使用相同的实例。
答案 0 :(得分:2)
StructureMap对象的默认生命周期为PerRequestLifecycle
,这意味着同一构建会话中对同一接口的多个请求将解析为单个实例。如果您希望它将每个接口请求解析为唯一实例,则可以使用UniquePerRequestLifecycle
。
TL; DR :像这样配置您的IDb
:
x.For<IDb>.AlwaysUnique().Use<Db>();