我有一个 ASP.NET MVC4 应用程序,并且正在为 IOC 使用 Unity。我正在使用 Unity.MVC4 和 UnityConfiguration Nuget 包来帮助注册。
我需要自动将大量接口及其相关类型注册到 Unity 容器。为此,我创建了一个虚拟接口;我所有的真实接口都继承自 IDependencyInjectionScanner。下面是显示这一点的代码。
public interface IDependencyInjectionScanner
{
}
public interface IChair : IDependencyInjectionScanner
{
NumberOfLegs { get; set; }
}
public class Chair : IChair
{
public NumberOfLegs { get; set; }
}
public interface ITable : IDependencyInjectionScanner
{
NumberOfChairs { get; set; }
}
public class Table : ITable
{
public NumberOfChairs { get; set; }
}
然后我使用 UnityConfiguration 使用扫描仪绑定注册。我已经在控制器中正确解析了接口。下面是显示我如何进行绑定的代码。
Scan(scan =>
{
scan.AssembliesInDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"));
scan.With<FirstInterfaceConvention>();
scan.Include(x => (x.GetInterface(typeof(IDependencyInjectionScanner).Name) != null));
scan.ForRegistries();
});
问题是我想使用分层生命周期管理器注册扫描仪找到的所有类型,但可以弄清楚如何做到这一点。UnityConfiguration 的 GitHub 页面https://github.com/thedersen/UnityConfiguration指出这可以通过以下代码实现:
Configure<IChair>().AsHierarchicalControlled();
但是,如果我必须对扫描仪绑定的每个接口都这样做,那么扫描仪就没有用了,因为我也可以这样做:
Register<IChair, Chair>().AsHierarchicalControlled();
有人可以帮助我找到解决方案吗?