首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建静态工厂?

如何创建静态工厂?
EN

Stack Overflow用户
提问于 2012-08-05 12:28:29
回答 3查看 449关注 0票数 1

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

所以..。

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

代码看起来像:

代码语言:javascript
复制
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; }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-05 12:42:15

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

代码语言:javascript
复制
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容器来管理对象的生存期。

票数 4
EN

Stack Overflow用户

发布于 2012-08-05 12:32:08

静态类不可能从接口继承。我认为你真正想要的是一个单身生命周期工厂。

票数 0
EN

Stack Overflow用户

发布于 2012-08-05 12:40:57

为什么不使用Microsoft统一和依赖注入这是一个比管理您自己的静态工厂更好的实践:http://msdn.microsoft.com/en-us/library/ff649614.aspx它将是为您所有对象实例化的统一框架

代码语言:javascript
复制
IUnityContainer myContainer = new UnityContainer();
FactoryDataAccess da= new FactoryDataAccess();
myContainer.RegisterInstance<IFactoryDataAccess >(da);

当您调用它时,它将使用FactoryDataAccess实例:

代码语言:javascript
复制
IFactoryDataAccess myServiceInstance = myContainer.Resolve<IFactoryDataAccess >();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11816411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档