簡體   English   中英

C#/ ASP.NET MVC 4實例化從工廠方法中的接口派生的對象

[英]C#/ASP.NET MVC 4 Instantiate Object Derived From Interface In Factory Method

當前具有一個具有GetSelector函數的Factory類,該函數返回ISelector的具體實現。 我有幾個實現ISelector的不同類,並且基於一個設置,我希望收到適當的ISelector

public interface ISelector
{
    string GetValue(string Params);
}

public class XmlSelector : ISelector
{
    public string GetValue(string Params)
    {
        // open XML file and get value
    }
}

public static class SelectorFactory
{
    public static ISelector GetSelector()
    {
        return new XmlSelector(); // Needs changing to look at settings
    }
}

我的問題是存儲設置的最佳方法是什么? 我知道使用AppSettings等,但是我不確定是否要在web.config中存儲字符串並對其進行切換-似乎真的緊密地聯系在一起,如果ISelector的新實現是制作,則需要更改工廠。 有沒有辦法存儲程序集名稱並基於該實例化?

謝謝,

克里斯

很難說,因為我不知道您的特定項目的體系結構,但是乍一看我會做的是, 如果可以將與ISelector關聯的對象與Web應用程序分離,我會將這些對象放在一個類庫以及工廠。 如果實現新的ISelector,則需要更改工廠,但是如果您可以將整個ISelector系列與實際的Web應用程序分離,則與單片架構相比,重構的深度將很小。

就個人而言,我傾向於避免針對關鍵任務設計問題使用AppSettings,web.config設置等。 以web.config為例,我看到了存儲體系結構數據以簡化可配置性的應用程序。 問題在於,編譯后可以更改web.config(畢竟是這樣做的目的),並且如果類的實現取決於所選擇的非常特定的值,那么當有人無意間修改時,您就有崩潰的風險。錯誤的值。

就像我說的那樣,所有這些都完全取決於您的應用程序體系結構,但是我的反思是將可能會在將來進行修改的組件拆分為一個類庫。 松耦合是你的朋友;)。

我認為不是在AppSettings中這樣做,而是一種更好的方法是創建一個單獨的XML文件,該文件僅保存映射,您可以從該文件中迭代映射並在GetSelector()返回正確的實例。

暫無
暫無

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

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