【问题标题】:Castle Windsor lifestyle in dotnet core web applicationdotnet 核心 Web 应用程序中的 Castle Windsor 生活方式
【发布时间】:2017-03-28 07:27:00
【问题描述】:

在使用 Castle Windsor MS 适配器时,应该用什么生活方式来代替 PerWebRequest?

https://github.com/volosoft/castle-windsor-ms-adapter

在 dotnet core 之前,我会为容器中的几乎所有组件使用 PerWebRequest 生活方式。现在我们已与 IIS 模块和 http 上下文断开连接,我想确保在 Web 请求开始和结束时创建和处理我的组件。

例子:

container.Register(Component.For<MyEntityFrameworkContext>)
    .ImplementedBy<MyEntityFrameworkContext>()
    .LifestyleTransient());

【问题讨论】:

    标签: asp.net .net castle-windsor


    【解决方案1】:

    ASP.NET Core 有自己的“范围”生命周期,即“每个请求”。查看它的文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection

    使用示例:

    services.AddScoped<ICharacterRepository, CharacterRepository>();
    

    您应该在 Startup 类的 ConfigureServices 方法中执行此操作。

    【讨论】:

    • 有什么办法可以从使用内置的 IoC 容器中解耦?我们在这个项目中有多个endpoints,想使用一个更强大的容器。
    • 另外,如果我们必须使用内置容器,我们会在哪些情况下使用这样的适配器?
    • 这是 AspNet Core 的 DI 的设计。但是您可以使用 LifestyleCustom 直接通过 Windsor API 制作它(这个库在这里制作:github.com/volosoft/castle-windsor-ms-adapter/blob/master/src/…)。
    • 如果你有多个地方来注册依赖,你必须自己做那个抽象。示例:你可以创建一个接口来注册依赖,在ConfigureServices中找到所有的实现并调用它们。
    • 说这个 gist 中的注册提供相同的功能是否正确? gist.github.com/detroitpro/d6f05342f6b9817ed3269b0a6449c957
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多