c# - 你如何创建静态工厂?

标签 c# design-patterns factory-pattern

我有一系列工厂对象,希望通过“根”实用程序(对象)公开。这个根实用程序本身就是一个工厂。作为实用程序对象,我希望将其实现为静态类。但是,使用我当前的设计是不可能的...因为您不能在接口(interface)中实现静态成员。

所以...

我的问题是:如何更改下面的类以获得上面的静态工厂影响?

代码如下所示:

public interface IFactory
{
    I Create<I>();

    IFactoryTransform Transformer { get; }
    IFactoryDataAccess DataAccessor { get; }
    IFactoryValidator Validator { get; }
}

public static class Factory : IFactory
{
    static Factory()
    {

        Transformer = new FactoryTransform();
        DataAccessor = new FactoryDataAccess();
        Validator = new FactoryValidator();
    }

    public I Create<I>()
    {
        var model = typeof(I);

        // Activation code will go here...

        throw new NotSupportedException("Type " + model.FullName + " is not supported.");
    }

    public IFactoryDataAccess DataAccessor { get; private set; }
    public IFactoryTransform Transformer { get; private set; }
    public IFactoryValidator Validator { get; private set; }
}

最佳答案

您可以将 static 关键字从 Factory 类移到上一级。例如,您可以有一个 static class Utils,其中您有一个单例属性 MyFactory

public static class Utils
{
    public static IFactory MyFactory {get; private set}
    static Utils()
    {  
        MyFactory = new Factory();
    }
}

//usage
var myInterface = Utils.MyFactory.Create<IMyInterfrace>()

也就是说,我可能会使用 DI 而不是工厂和 IoC 容器来管理对象的生命周期。

关于c# - 你如何创建静态工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11816411/

相关文章:

c# - 函数的 IDL 声明(在 C++ 中)将从 C# 获取 C 样式数组

javascript - StimulusJS 如何根据不同子 Controller 中的值计算父 Controller 中的值(购物车 -> 购物车项目)

c# - 使用 Where 子句返回子代

algorithm - 在不修改集合的情况下获取更改命令

java - 哪个是更好的单例实现?

java - 这是工厂模式的完美问题吗?

c# - 如何更改此代码以返回多个不同的项目

c# - 理解 MVVM 中的分离

c# - 具有最大值的文本框

c# - 如何从 UWP MediaPlayer 获取流元数据?