首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用简单注入器在特定应用程序基础上重写生命周期

使用简单注入器在特定应用程序基础上重写生命周期
EN

Stack Overflow用户
提问于 2014-10-08 14:23:25
回答 1查看 132关注 0票数 1

我试图为我的解决方案实现组合根,该解决方案由多个应用程序和几个类库组成。我使用简单的注入器作为我选择的DI框架。

拥有多个应用程序需要多个组合根。但是,我不希望在每个组合根中有重复的容器注册。因此,我正在考虑使用https://stackoverflow.com/a/11993030/852765中提到的方法,但遇到了一些问题。

如何在申请的基础上覆盖注册的生命周期?具体来说,我希望覆盖一些容器注册,以便在我的Web应用程序中具有“每个Web请求生命周期”,而我的其他应用程序则使用一个短暂的生命周期来进行相同的注册。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 14:56:47

诀窍是将范围内的生活方式之一传递到组合根的集中部分。您可以通过使用ScopedLifestyle基类来做到这一点:

代码语言:javascript
复制
public static class BusinessLayerBootstrapper
{
    public static void Bootstrap(Container container, ScopedLifestyle scopedLifestyle)
    {
        container.Register<IUnitOfWork, MyDbContext>(scopedLifestyle);

        // etc...
    }
}

在您的最终应用程序中,您可以如下所示:

代码语言:javascript
复制
public class Global : Application
{
    protected override Application_Start()
    {
        var container = new Container();

        container.RegisterMvcControllers();

        BusinessLayerBootstrapper.Bootstrap(container, new WebRequestLifestyle());

        DependencyResolver.SetResolver(
            new SimpleInjectorDependencyResolver(container));
    }
}

虽然在使用Lifestyle基类本身时也是这样,但是这个类缺少您可能感兴趣的一些功能,比如RegisterForDisposalGetCurrentScopeWhenScopeEnds

当您创建混合生活方式时,传递ScopedLifestyle甚至有效,因为存在一个Lifestyle.CreateHybrid重载,它接收两个ScopedLifestyle实例并返回一个新的ScopedLifestyle实例:

代码语言:javascript
复制
ScopedLifestyle mixedScopeLifestyle = Lifestyle.CreateHybrid(
    () => HttpContext.Current != null,
    new WebRequestLifestyle(),
    new LifetimeScopeLifestyle());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26259320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档