使用应由DI容器解析的依赖项实现被动属性

nir*_*irw 9 entity-framework dependency-injection asp.net-web-api

我正在尝试在ASP.NET Web API中实现被动属性.我正在实现的过滤器依赖于存储库,存储库本身依赖于自定义DbContext.在帖子中,它表示您可以使用DI容器解析组件,但也应该从Application_Start调用代码.我不确定如何实现这一点,同时利用DI容器的生命周期管理功能(以便每个请求使用一个新的DbContext).注入抽象工厂会是一个很好的解决方案吗?还是有一些我想念的更简单的东西.

Mar*_*ann 9

您可以通过在Filter和Repository之间滑动Decoraptor来解决此问题.

不太了解您的代码,您应该能够使用Abstract Factory定义Decoraptorepository:

public class Decoraptorepository : IRepository
{
    private readonly IFactory<IRepository> factory;

    public Decoraptorepository(IFactory<IRepository> factory)
    {
        this.factory = factory;
    }

    // Just guessing IRepository's member(s) here...
    public void Save(Foo foo)
    {
        this.factory.Create().Save(foo);
    }

    // other members...
}
Run Code Online (Sandbox Code Playgroud)

这使得Filter可以保持Singleton,而实际的Repository以Transient方式创建.

如果您还需要处理对象,请参阅后续文章,了解如何从Decoraptor中停用Transient对象.