如何在每次需要时注入新对象?

时间:2013-01-24 16:05:41

标签: structuremap

我有这个构造函数:

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,因为我不能使用相同的实例。

1 个答案:

答案 0 :(得分:2)

StructureMap对象的默认生命周期为PerRequestLifecycle,这意味着同一构建会话中对同一接口的多个请求将解析为单个实例。如果您希望它将每个接口请求解析为唯一实例,则可以使用UniquePerRequestLifecycle

TL; DR :像这样配置您的IDb

x.For<IDb>.AlwaysUnique().Use<Db>();