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