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

时间:2014-08-21 18:36:45

标签: entity-framework asp.net-web-api dependency-injection

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

1 个答案:

答案 0 :(得分:8)

您可以通过在过滤器和存储库之间滑动Decoraptor来解决此问题。

您对代码了解不多,您应该能够使用抽象工厂定义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...
}

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

如果您还需要处理对象,请参阅how to decommission Transient objects from within a Decoraptor上的后续文章。