簡體   English   中英

如何將服務注入 .net 核心中的 static 方法

[英]How can I inject a service into a static method in .net core

我正在編寫一個 html 助手,它將為我做一些計算。 現在因為它是一個助手,所以它是一個 static 方法。 例如:

public class MyHelper
{
    public static HtmlString DoSomething()
    {
        //do some action and return;
    }
}

我面臨的問題是我從 cshtml 文件中調用它,我需要以某種方式計算此方法中的文件版本。 通常我可以用<asp-apend-verion="true">在 html 中調用它,但是因為我在這里返回一個字符串,所以如果我只是輸入它就不起作用。

根據我所做的研究,我發現我可以用IFileVersionProvider.AddFileVersionToPath做同樣的事情,但是我不知道如何注入它,所以我可以在該方法中使用它。

編輯:

我想我可能需要提供更清晰的圖片。 本質上,我試圖做到這一點,以便在調試代碼時,我的 javascript 文件為我提供了該文件的完整版本,並且在生產時它們為我提供了縮小版本。 As such, I have a modified version of the helper class I found online https://gist.github.com/mohamedmansour/cd50123f8575daba7a7f12847b12da5d to do that for me. 我的代碼有點不同,因為我想要一些其他的東西。 其中一件事是我仍然想要 append 文件版本。 所以我基本上從 HTML 文件中調用它。 如果我只是添加<asp-append-verion="true">那么它不起作用,因為它被解析為字符串。 因此,在返回該字符串之前,我需要 append 版本。 我發現我可以通過 IFileVersionProvider 做到這一點,但我需要實現該方法才能使用它。 這是我唯一的瓶頸。

編輯2:

我目前的解決方案是在啟動 class 中創建一個 static 屬性,然后將其注入到 Configure 方法中。 然后我可以從任何地方調用它。 想知道是否有更好的解決方案?

我沒有足夠的聲譽來寫評論,否則我會詢問更多細節,但我希望我仍然可以提供幫助。

如果您的助手 class 已經演變成復雜到需要 DI 的東西,那么 static 方法可能不適合。 我通常為不依賴 state 的函數編寫 static 方法,即純函數,例如Math.Sqrt 如果您的方法依賴於 class,那么我會將其重構為實例方法並將其注入其使用者。

也就是說,如果您仍想使用 static class,您可以將依賴項注入 static 方法:

public class MyHelper
{
    public static HtmlString DoSomething(IFileVersionProvider provider, int otherParameter)
    {
        //do some action and return;
    }
}

如果您不想將IFileVersionProvider注入消費者 class,您可以執行以下操作:

public class Consumer
{
    private readonly Func<int, HtmlString> doSomething;

    public Consumer(Func<int, HtmlString> doSomething)
    {
        this.doSomething = doSomething;
    }
}

// somewhere in the IoC container configuration
services.AddSingleton<Consumer>(
    s => new Consumer(p => MyHelper.DoSomething(s.GetService<IFileVersionProvider>(), p));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM