Unity:如何注入配置和已注册的实例

时间:2016-06-28 20:45:05

标签: c# unity-container

    public class Job1:IJob
    {
        public Job(MyService service)
        {
        }
    }

    public class Job2:IJob
    {
        public Job(MyService service,int hours)
        {
        }
    }


    public static IUnityContainer ConfigureUnityContainer()
    {
        UnityContainer container = new UnityContainer();
        container.RegisterType<MyService, MyService>();
        container.RegisterType<IJob, Job1>("Job1");  
        container.RegisterType<IJob, Job2>("Job2", new InjectionConstructor(Convert.ToInt32(ConfigurationManager.AppSettings["Hours"])));  
        return container;
    }

我有两个来自Job1接口的Job2IJob条款。请参阅上面的构造函数实现

Job2构造函数有2个参数。第二个参数的值来自配置文件。我在注册Job2时传递了这个值。 但是对于第一个参数MyService,我希望Unity会自动将MyService实例传递给构造函数,因为它已经注册了。但是当执行时我得到错误

  

MyNameSpace.Job2没有带参数的构造函数   (Int32)已

请注意,Unity可以将MyService的实例传递给Job1

1 个答案:

答案 0 :(得分:1)

添加第一个参数 - 服务类型:

container.RegisterType<IJob, Job2>("Job2", new InjectionConstructor(typeof(MyService), Convert.ToInt32(ConfigurationManager.AppSettings["Hours"])));