C# 在生成时验证Microsoft Unity依赖项

C# 在生成时验证Microsoft Unity依赖项,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,有没有一种方法可以在构建时验证Unity依赖关系 我们正致力于从一个接口迁移到另一个接口以进行日志记录,并且正在遇到这样的情况:在更改后,我们缺少更新依赖类。不幸的是,直到运行时才发现这一点 在构建时有什么策略来检查这个问题吗?理想情况下,这将在具有构建解决方案的开发人员机器上完成,但我很高兴在我们的持续集成环境上运行检查。如果我正确理解您的问题,您有几个不同的应用程序,它们都共享公共项目。应用程序A和应用程序B都注册了项目1中的依赖项。在某个时候,应用程序a的开发人员会向Project 1添加

有没有一种方法可以在构建时验证Unity依赖关系

我们正致力于从一个接口迁移到另一个接口以进行日志记录,并且正在遇到这样的情况:在更改后,我们缺少更新依赖类。不幸的是,直到运行时才发现这一点


在构建时有什么策略来检查这个问题吗?理想情况下,这将在具有构建解决方案的开发人员机器上完成,但我很高兴在我们的持续集成环境上运行检查。

如果我正确理解您的问题,您有几个不同的应用程序,它们都共享公共项目。应用程序A和应用程序B都注册了项目1中的依赖项。在某个时候,应用程序a的开发人员会向Project 1添加新接口,并在其中注册新的依赖项。但是,没有人记得应用程序B,当您构建/部署应用程序B时,您发现了问题。是这样吗

假设是这样的话,那么有一个简单的方法可以解决这个问题,那就是让Project 1负责注册它自己的依赖项。创建如下所示的类:

public static class UnityHelper
{
    public static void RegisterTypes<T>(IUnityContainer container)
        where T : LifetimeManager
    {
        container.RegisterType<ISomething, Something>(Activator.CreateInstance<T>());
    }
}

您指的是在更改后更新依赖类是什么?切换到新界面并检查旧界面是否不再使用?只需删除或删除旧接口,仍然使用它的代码将无法编译。问题是我们没有人力来简单地删除旧接口。此接口用于+30个不同的项目,每个项目都需要手动测试,并且它们都不使用相同的实现。问题在于,这不仅仅是两个应用程序。我们谈论的是+30个应用程序,它们使用这个接口的+5个实现。我喜欢统一助手的想法,但我们可能需要它的多种变体。。。如果有人搞砸了,我们仍然不知道,直到运行时;在运行时之前,您不会发现这些问题,但您可以通过集中依赖项注册来最小化它们。不过,我不知道为什么需要多个版本。Unity进行延迟加载,因此您可以一次性注册所有依赖项,而应用程序只实例化它需要的依赖项。如果您正在使用接口的多个实现,则可以命名它们,然后使用常量来防止硬编码魔术字符串。请参阅更新以回答。
public static void RegisterTypes(IUnityContainer container)
{
    UnityHelper.RegisterTypes<ContainerControlledLifetimeManager>(container);
}
container.RegisterType<ISomething, Something1>(Activator.CreateInstance<T>(UnityConstants.SOMETHING1));
container.RegisterType<ISomething, Something2>(Activator.CreateInstance<T>(UnityConstants.SOMETHING2));

public MyClass([Dependency(UnityConstants.SOMETHING1) ISomething something1, 
    [Dependency(UnityConstants.SOMETHING2) ISomething something2)
{
}