如何解析具体的非抽象类实例

时间:2018-04-25 06:43:35

标签: c# .net dependency-injection unity-container

我有以下问题。我有抽象基类型和具体子类型

    public interface IInterface
    {
        void SomeAction()
    }

    public class CClass : IInterface
    {
        public void SomeAction()
        {
            throw new NotImplementedException();
        }
    }

我想使用工厂方法解析接口dependensies但有时我想解决没有工厂方法的具体类dependensies。我的意思是:

    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被称为各方面。为什么?怎么了?我想使用工厂方法来抽象dependensies olnly

2 个答案:

答案 0 :(得分:1)

要解决具体类,您无需注册它。 Unity将尝试创建实例。

要使用工厂方法解析界面,您只需要注册界面,如答案所示:

container.RegisterType<IInterface>(new InjectionFactory(FactoryMethod));

这里没有不好的做法。

顺便说一下,您的初始界面注册container.RegisterType<IInterface, CClass>(new InjectionFactory(FactoryMethod))为我提供了System.InvalidOperationException。无论如何,在这种情况下,我认为没有任何理由指定第二个通用参数。

答案 1 :(得分:0)

我找到了解决方案,但我不确定这是最好的实践。如果我不编写具体的TTo泛型参数类型,它可以正常工作。

container.RegisterType<IInterface>(new InjectionFactory(FactoryMethod));

但似乎是嗅觉方式