我有一系列工厂对象,我希望通过一个“根”实用程序(object)来公开。这个根功用本身就是一个工厂。作为实用工具对象,我希望将其实现为静态类。但是,使用我当前的design...as是不可能的,您不能在接口中实现静态成员。
所以..。
我的问题是:如何改变下面的类以获得上面的静态工厂影响?
代码看起来像:
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; }
}发布于 2012-08-05 12:42:15
您可以将静态关键字从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容器来管理对象的生存期。
发布于 2012-08-05 12:32:08
静态类不可能从接口继承。我认为你真正想要的是一个单身生命周期工厂。
发布于 2012-08-05 12:40:57
为什么不使用Microsoft统一和依赖注入这是一个比管理您自己的静态工厂更好的实践:http://msdn.microsoft.com/en-us/library/ff649614.aspx它将是为您所有对象实例化的统一框架
IUnityContainer myContainer = new UnityContainer();
FactoryDataAccess da= new FactoryDataAccess();
myContainer.RegisterInstance<IFactoryDataAccess >(da);当您调用它时,它将使用FactoryDataAccess实例:
IFactoryDataAccess myServiceInstance = myContainer.Resolve<IFactoryDataAccess >();https://stackoverflow.com/questions/11816411
复制相似问题