任何人都可以解釋我在這裏失蹤了嗎?我創建了一個簡單的應用程序,使用默認的asp.net核心1.1 MVC模板。我正在使用默認的DI容器,除了添加中間件類和DI配置之外,沒有做任何其他更改。中間件和Scoped/Singleton對象
問題是,當使用對象的Scoped或Singleton實例時,同一個對象不會在兩個位置注入。
下面的代碼:
public class MyMiddleware
{
private readonly RequestDelegate _next;
public MyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext httpContext, MyInstance myInstance)
{
httpContext.Items["myInstance"] = myInstance;
myInstance.MyProperty = 99;
await _next(httpContext);
}
}
public class MyInstance
{
public int MyProperty { get; set; }
}
在ConfigureServices我:
services.AddSingleton<MyInstance>();
在配置我:
app.UseMiddleware<MyMiddleware>();
和家庭控制器指數方法,我有:
public IActionResult Index(MyInstance myInstance)
{
if (ReferenceEquals(HttpContext.Items["myInstance"], myInstance))
Debug.WriteLine("Equal!");
else
Debug.WriteLine("Not Equal!");
return View();
}
無論我是否使用Scoped或Singleton生命週期,它總是打印「不等於!」。另外,通過調試,我已經驗證的MyProperty
在HomeController索引中爲0。
顯然,我在這裏錯過了一些東西。它也在.NET Core 2.0 Preview1中做同樣的事情。
此處有任何建議嗎?
編輯:
至於另一項測試,我設置MyProperty
在HomeControll /指數,並在第二次刷新值回0再一個不同的值,所以很明顯這似乎是創建一個新的瞬態的實例每時間。