有没有一种方法可以通过xml配置来表示对象上的静态工厂方法?
ymdaylpp1#
控制反转/依赖注入和static不能很好地混合。相反,请执行以下操作。有一个IFooFactory和一个具体的实现FooFactory:
static
IFooFactory
FooFactory
public interface IFooFactory { Foo Create(); } public class FooFactory : IFooFactory { public Foo Create() { Foo foo = // create Foo return foo; } }
然后,将FooFactory注册为IFooFactory与ContainerControlledLifeTimeManager的具体实现,以便它像单例一样工作:
ContainerControlledLifeTimeManager
IUnityContainer container = new UnityContainer(); var manager = new ContainerControlledLifeTimeManager(); container.RegisterType<IFooFactory, FooFactory>(manager);
当你需要工厂时:
IFooFactory factory = container.Resolve<IFooFactory>(); Foo foo = factory.Create();
如果你不能改变工厂的实现,使它没有static方法,那么你需要创建一个 Package 器:
public class FooFactoryWrapper { public Foo Create() { return FooFactoryTypeWithStaticCreateMethod.Create(); } }
然后注册
container.Register<IFooFactory, FooFactoryWrapper>();
当然,您也可以在XML中注册FooFactory或FooFactoryWrapper作为IFooFactory的具体实现。如果你需要帮助就告诉我。关键是要远离静电。也就是说,以下是如何在Unity中注册静态工厂:
FooFactoryWrapper
IUnityContainer container = new UnityContainer(); container.AddNewExtension<StaticFactoryExtension>() .Configure<IStaticFactoryConfiguration>() .RegisterFactory<IFoo>(container => FooFactory.Create()); var foo = container.Resolve<IFoo>(); // uses FooFactory
我不知道如何使用XML来设置它,在使用Reflector四处闲逛之后,我认为这是不可能的。我在Microsoft.Practices.Unity.StaticFactory中找不到任何可以处理配置元素的类。您可能需要添加自己的处理程序。
Microsoft.Practices.Unity.StaticFactory
1条答案
按热度按时间ymdaylpp1#
控制反转/依赖注入和
static
不能很好地混合。相反,请执行以下操作。有一个IFooFactory
和一个具体的实现FooFactory
:然后,将
FooFactory
注册为IFooFactory
与ContainerControlledLifeTimeManager
的具体实现,以便它像单例一样工作:当你需要工厂时:
如果你不能改变工厂的实现,使它没有
static
方法,那么你需要创建一个 Package 器:然后注册
当然,您也可以在XML中注册
FooFactory
或FooFactoryWrapper
作为IFooFactory
的具体实现。如果你需要帮助就告诉我。关键是要远离静电。
也就是说,以下是如何在Unity中注册静态工厂:
我不知道如何使用XML来设置它,在使用Reflector四处闲逛之后,我认为这是不可能的。我在
Microsoft.Practices.Unity.StaticFactory
中找不到任何可以处理配置元素的类。您可能需要添加自己的处理程序。