2

我已经实现了一个自定义 OutputCacheProvider

public class MongoDBCacheProvider : OutputCacheProvider, IDisposable { ... }

cacheprovider 的注册方式如下:

<outputCache defaultProvider="MongoDBCacheProvider" enableOutputCache="true"  >
  <providers>
    <add name="MongoDBCacheProvider" type="Mynamespace.Core.Caching.MongoDBCacheProvider, Mynamespace.Core" />
  </providers>
</outputCache>

我需要将一些参数传递给构造函数。我想使用 Ninject 来绑定我的缓存提供程序。

this.Bind<System.Web.Caching.OutputCacheProvider>()
    .To<Core.Caching.MongoDBCacheProvider>()
    .WithConstructorArgument("databaseName", dbName);

必须传递更多参数,但这只是一个示例。我确信存在简单的解决方案来以某种方式获取该字符串,但我更喜欢使用 Ninject,就像我用于所有其他类一样。

失败并显示以下消息:“没有为此对象定义无参数构造函数。” 以下绑定也不起作用。

this.Bind<Core.Caching.MongoDBCacheProvider>().ToSelf()
    .InSingletonScope()
    .WithConstructorArgument("databaseName", dbName);

我已经验证绑定在错误发生之前运行。ASP .NET 以某种方式绕过了 ninject 绑定。似乎也没有任何方法可以为它插入工厂。

有人知道我如何将构造函数参数传递给派生的 OutputCacheProvider 吗?

谢谢你。

4

1 回答 1

1

通过在应用程序启动期间注入对象,您应该能够Inject在 Web 应用程序生命周期的早期进入该对象。

注意,您必须优先使用属性设置器注入而不是构造器注入,因为可能无法让缓存提供程序提供程序让您控制实例创建。

请参阅@Remo Gloor 的这篇博文

于 2012-08-18T14:47:56.550 回答