本文整理汇总了C#中Container.RegisterFactory方法的典型用法代码示例。如果您正苦于以下问题:C# Container.RegisterFactory方法的具体用法?C# Container.RegisterFactory怎么用?C# Container.RegisterFactory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Container
的用法示例。
在下文中一共展示了Container.RegisterFactory方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: T03_Register_Factory_Both
public void T03_Register_Factory_Both()
{
var container = new Container(log: Write);
container.RegisterFactory(factory1);
container.RegisterFactory<ISomeClass>(factory2);
container.Resolve<SomeClass>();
Assert.Equal(1, counter1);
container.Resolve<ISomeClass>();
Assert.Equal(1, counter2);
}
示例2: T01_Concrete
public void T01_Concrete()
{
var container = new Container(log: Write);
container.RegisterFactory(factory1);
Assert.Throws<TypeAccessException>(() => container.RegisterFactory(factory1)).WriteMessageTo(Write);
var instance1 = container.Resolve<SomeClass>();
Assert.Equal(1, counter1);
var instance2 = container.Resolve<SomeClass>();
Assert.Equal(2, counter1);
Assert.NotEqual(instance1, instance2);
}
示例3: T02_factory_from_factory
public void T02_factory_from_factory()
{
var container = new Container(log: Write);
Func<SomeClass> factory = () => new SomeClass();
container.RegisterFactory(factory);
var f = container.Resolve<Func<SomeClass>>();
Assert.Equal(factory, f);
Assert.NotEqual(f(), f());
}
示例4: T02_Register_Factory
public void T02_Register_Factory()
{
var container = new Container(log: Write);
container.RegisterFactory<ISomeClass>(factory1);
var instance1 = container.Resolve<ISomeClass>();
Assert.Equal(1, counter1);
var instance2 = container.Resolve<ISomeClass>();
Assert.Equal(2, counter1);
Assert.NotEqual(instance1, instance2);
}
示例5: T00_Various_types
public void T00_Various_types()
{
var container = new Container(log: Write);
Assert.Throws<ArgumentNullException>(() => container.RegisterSingleton(null)).WriteMessageTo(Write);
Assert.Throws<ArgumentNullException>(() => container.RegisterFactory(typeof(object), null)).WriteMessageTo(Write);
Assert.Throws<ArgumentNullException>(() => container.RegisterInstance(typeof(object), null)).WriteMessageTo(Write);
Assert.Throws<TypeAccessException>(() => container.RegisterSingleton(typeof(int))).WriteMessageTo(Write);
Assert.Throws<TypeAccessException>(() => container.RegisterSingleton(typeof(string))).WriteMessageTo(Write);
Assert.Throws<TypeAccessException>(() => container.RegisterInstance(42)).WriteMessageTo(Write);
Assert.Throws<ArgumentNullException>(() => container.Resolve(null)).WriteMessageTo(Write);
}
示例6: T03_Dispose_Other
public void T03_Dispose_Other()
{
var container = new Container(defaultLifestyle: DefaultLifestyle.Singleton, log: Write);
container.RegisterTransient<ClassA>();
var instance = container.Resolve<ClassA>();
container.Dispose();
Assert.False(instance.IsDisposed);
container.RegisterFactory(() => instance);
container.Dispose();
Assert.False(instance.IsDisposed);
}
示例7: GetInstance_TypeRegisteredAsFactory_ResolvesAsExpected
public void GetInstance_TypeRegisteredAsFactory_ResolvesAsExpected()
{
// Arrange
var container = new Container();
container.RegisterFactory<IServiceFactory>();
// Act
var factory = container.GetInstance<IServiceFactory>();
// Assert
Assert.IsNotNull(factory);
}
示例8: ToString_OnInstanceResolvedAsAutomaticFactory_Succeeds
public void ToString_OnInstanceResolvedAsAutomaticFactory_Succeeds()
{
// Arrange
var container = new Container();
container.Register<IService, Service>();
container.RegisterFactory<IServiceFactory>();
var factory = container.GetInstance<IServiceFactory>();
// Act
factory.ToString();
}
示例9: CallingFactoryMethod_OnInstanceResolvedAsAutomaticFactory_ResolvesExpectedService
public void CallingFactoryMethod_OnInstanceResolvedAsAutomaticFactory_ResolvesExpectedService()
{
// Arrange
var container = new Container();
container.Register<IService, Service>();
container.RegisterFactory<IServiceFactory>();
var factory = container.GetInstance<IServiceFactory>();
// Act
var instance = factory.CreateService();
// Assert
AssertThat.IsInstanceOfType(typeof(Service), instance);
}
示例10: T04_Register_Auto
public void T04_Register_Auto()
{
var container = new Container(log: Write, defaultLifestyle: DefaultLifestyle.Singleton);
container.RegisterFactory(factory1);
container.Resolve<SomeClass>();
Assert.Equal(container.Resolve<ISomeClass>(), container.Resolve<ISomeClass>());
Assert.Equal(1, counter1);
}
示例11: RegisterService
/// <summary>
/// 注册一个服务类型,以便服务工厂进行管理。
/// 该方法将指定的服务类型放入IOC容器,任何服务类型必须在注册后才能够通过IOC容器进行访问。
/// 该服务类型的实例是通过服务工厂对象创建的,其生命周期由为其定义的 ClientChannelCacheModeAttribute 决定。
/// </summary>
/// <param name="container">要在其中注册服务的容器。</param>
/// <param name="serviceType">要注册的服务类型。</param>
/// <param name="cacheModel">要注册的服务在客户端的缓存模式。</param>
public static void RegisterService(Container container, Type serviceType, ClientChannelCacheMode cacheModel)
{
if (!container.HasComponent(serviceType))
{
// 定义并初始化一些必须的变量
//Type factoryType = typeof(ConcentratedConfigServiceFactory<>);
Type factoryType = typeof(ServiceFactory<>);
Type genericFactoryType = factoryType.MakeGenericType(serviceType);
Dictionary<string, string> parameters = new Dictionary<string, string>(1);
parameters.Add("cacheModel", cacheModel.ToString());
// 注意,通过 Container.RegisterFactory 方法在容器中同时注册了两个服务:
// 1. 服务工厂, 单例模式
// 2. 服务 瞬态模式
// 因此,每次到容器中取得服务都会通过 服务工厂 进行创建,服务实例的缓存机制是我们自己实现的(详见 ServiceFactory 的实现)
container.RegisterFactory(genericFactoryType, parameters, serviceType, "CreateService", null, LifestyleType.Singleton);
}
}