如何解析具体非抽象 class 实例
How to resolve concrete non abstract class instance
我有以下问题。我有抽象基类型和具体子类型
public interface IInterface
{
void SomeAction()
}
public class CClass : IInterface
{
public void SomeAction()
{
throw new NotImplementedException();
}
}
我想使用工厂方法解决接口依赖关系,但有时我想在没有工厂方法的情况下解决具体的 class 依赖关系。我的意思是:
container.RegisterType<IInterface, CClass>(new InjectionFactory(FactoryMethod));
我的工厂方法是:
private object FactoryMethod(IUnityContainer arg)
{
/* do some specific logic */
return new CClass();
}
有时我想用工厂方法解决它:
var c1 = container.Resolve<IInterface>();
但有时我想在不调用 FactoryMethod 的情况下取消它
var c2 = container.Resolve<CClass>();
但是 FactoryMethod 以各种方式被调用。为什么?怎么了?我想对抽象依赖使用工厂方法 olnly
我找到了解决方案,但不确定这是最佳做法。如果我不编写具体的 TTo 通用参数类型,它工作正常。
container.RegisterType<IInterface>(new InjectionFactory(FactoryMethod));
不过好像有点味道
要解析具体的 class,您不需要注册它。 Unity 将尝试创建实例。
要使用工厂方法解析接口,您只需注册答案中显示的接口:
container.RegisterType<IInterface>(new InjectionFactory(FactoryMethod));
这里没有不好的做法。
顺便说一句,你的初始界面注册container.RegisterType<IInterface, CClass>(new InjectionFactory(FactoryMethod))
给我System.InvalidOperationException
。不管它是什么,在这种情况下,我看不出有任何理由指定第二个通用参数。
我有以下问题。我有抽象基类型和具体子类型
public interface IInterface
{
void SomeAction()
}
public class CClass : IInterface
{
public void SomeAction()
{
throw new NotImplementedException();
}
}
我想使用工厂方法解决接口依赖关系,但有时我想在没有工厂方法的情况下解决具体的 class 依赖关系。我的意思是:
container.RegisterType<IInterface, CClass>(new InjectionFactory(FactoryMethod));
我的工厂方法是:
private object FactoryMethod(IUnityContainer arg)
{
/* do some specific logic */
return new CClass();
}
有时我想用工厂方法解决它:
var c1 = container.Resolve<IInterface>();
但有时我想在不调用 FactoryMethod 的情况下取消它
var c2 = container.Resolve<CClass>();
但是 FactoryMethod 以各种方式被调用。为什么?怎么了?我想对抽象依赖使用工厂方法 olnly
我找到了解决方案,但不确定这是最佳做法。如果我不编写具体的 TTo 通用参数类型,它工作正常。
container.RegisterType<IInterface>(new InjectionFactory(FactoryMethod));
不过好像有点味道
要解析具体的 class,您不需要注册它。 Unity 将尝试创建实例。
要使用工厂方法解析接口,您只需注册答案中显示的接口:
container.RegisterType<IInterface>(new InjectionFactory(FactoryMethod));
这里没有不好的做法。
顺便说一句,你的初始界面注册container.RegisterType<IInterface, CClass>(new InjectionFactory(FactoryMethod))
给我System.InvalidOperationException
。不管它是什么,在这种情况下,我看不出有任何理由指定第二个通用参数。