我希望通过“root”实用程序(对象)公开一系列Factory对象。这个根实用程序本身就是一个工厂。作为实用程序对象,我希望将其实现为静态类。但是,使用我当前的设计是不可能的......因为您无法在界面中实现静态成员。
因此...
我的问题是:我如何更改下面的类以获得上面的静态工厂影响?
代码看起来像:
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; }
}
答案 0 :(得分:4)
您可以将 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容器来管理对象的生命周期。
答案 1 :(得分:0)
静态类不可能从接口继承。我认为你真正想要的是一个单身生命周期工厂。
答案 2 :(得分:0)
为什么不使用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 >();