C# 在控制台应用程序中处理来自不同项目的依赖关系

C# 在控制台应用程序中处理来自不同项目的依赖关系,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我的解决方案中有以下项目结构: Project.Repository(类库) Project.Core(类库) Project.Web(MVC5 Web前端) 计划程序(控制台应用程序) 我使用Unity来处理我的DI 我的问题 我有一个位于核心层的方法,这个方法依赖于在我的Unity配置中处理的IProcessDataService接口 //Service container.RegisterType<IProcessDataService, Pr

我的解决方案中有以下项目结构:

Project.Repository(类库)

Project.Core(类库)

Project.Web(MVC5 Web前端)

计划程序(控制台应用程序)

我使用Unity来处理我的DI

我的问题

我有一个位于核心层的方法,这个方法依赖于在我的Unity配置中处理的
IProcessDataService
接口

    //Service            
    container.RegisterType<IProcessDataService, ProcessDataService>(new PerRequestLifetimeManager());

你的控制台应用程序的主要方法是你的,你应该在那里做你所有的接线


然后,您可以从容器解析对象并对其调用方法。

首先,您必须初始化一个新的Unity容器,并注册映射。然后,您必须使用服务定位器模式来解决IProcessDataService依赖关系。请不要使用服务定位器模式。只需连接容器以生成对象图,并获取根对象,然后从那里开始。@SamHolder但他不能将任何依赖项注入到静态主方法中吗?如果您使用的是container.Resolve,则它基本上是一个服务定位器。@generalexception正确,但他不想这样做,因为main方法是应用程序的根,因此它是容器的所有配置应该发生的地方,并且将解析他要调用该方法的对象。容器将提供IProcessDataService。为此,我通常使用
HierarchyCallifeTimeManager
而不是
PerRequestLifeTime Manager
。基本上,我将UnityConfig.cs和unitymvcavator.cs的内容滚动到我自己的ConfigureUnity()方法中,并从我的入口点(Main)调用它。然后,我可以通过以下操作创建所需的对象:ProcessDataService service=container.Resolve();我所有的依赖关系都得到了处理。确保将这些依赖项所需的任何内容从web.config传输到app.config。
public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Begin Automation Process");

            //Run method from Core layer which has a dependency on IProcessDataService

        }
    }