首页 > 解决方案 > 如何解析具体的非抽象类实例

问题描述

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

    public interface IInterface
    {
        void SomeAction()
    }

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

我想使用工厂方法解决接口依赖关系,但有时我想在没有工厂方法的情况下解决具体的类依赖关系。我是说:

    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 以各种方式被调用。为什么?怎么了?我只想对抽象依赖使用工厂方法

标签: c#.netdependency-injectionunity-container

解决方案


要解析一个具体的类,您不需要注册它。Unity 将尝试创建实例。

要使用工厂方法解析接口,您只需注册答案中显示的接口:

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

这里没有不好的做法。

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


推荐阅读