假設我有一個註冊爲HttpRequestScoped的依賴項,所以每個請求只有一個實例。我怎麼能解決一個HttpRequest之外的相同類型的依賴?在Autofac中的HttpRequest之外解決HttpRequestScoped實例
例如:
// Global.asax.cs Registration
builder.Register(c => new MyDataContext(connString)).As<IDatabase>().HttpRequestScoped();
_containerProvider = new ContainerProvider(builder.Build());
// This event handler gets fired outside of a request
// when a cached item is removed from the cache.
public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
// I'm trying to resolve like so, but this doesn't work...
var dataContext = _containerProvider.ApplicationContainer.Resolve<IDatabase>();
// Do stuff with data context.
}
上面的代碼拋出一個DependencyResolutionException當它執行CacheItemRemoved處理程序:
否範圍相匹配的表達式「值(Autofac.Builder.RegistrationBuilder`3 + < > c__DisplayClass0 [MyApp.Core.Data.MyDataContext,Autofac.Builder.SimpleActivatorData,Autofac.Builder.SingleRegistrationStyle])。lifetimeScopeTag.Equals(scope.Tag)'在請求實例的作用域中可見。
這可以工作,但由於某種原因,我做任何更改時都沒有保留回數據庫。 – 2010-06-16 17:44:33
由於您不在HTTP請求之外,因此您添加的任何請求管道將不會執行;有可能你需要在某個地方提交一個事務。 – 2010-06-16 23:59:44