我正在尝试为接口注册动态实现,这些实现将被注入到由我的IoC容器(在本例中是Unity)创建的对象中。
以下是我采取的高级方法:
1. 动态从JSON文件加载属性列表。我目前正在使用JSON.NET进行此操作。 2. 将该动态对象映射到一个接口。我目前正在使用Impromptu进行此操作。 3. 为接口类型向我的IoC容器注册该动态对象。
以下是“理论上”应该工作的代码:
以下是我采取的高级方法:
1. 动态从JSON文件加载属性列表。我目前正在使用JSON.NET进行此操作。 2. 将该动态对象映射到一个接口。我目前正在使用Impromptu进行此操作。 3. 为接口类型向我的IoC容器注册该动态对象。
以下是“理论上”应该工作的代码:
var configJson = File.ReadAllText(".\\Configuration\\DataCollector.json");
dynamic expando = JsonConvert.DeserializeObject(configJson);
var container = new UnityContainer();
var interfaceType = Type.GetType("Manufacturing.Framework.Configuration.IDataCollectorConfiguration", true);
var interfaceInstance = Impromptu.ActLike(expando, interfaceType);
container.RegisterInstance(interfaceType, "IDataCollectorConfiguration", interfaceInstance, new ContainerControlledLifetimeManager());
一切都很好,直到最后一行。Unity不喜欢我没有给它一个实际的接口实例,而只是一个鸭子类型的实例。
The type ImpromptuInterface.ActLikeCaster cannot be assigned to variables of type Manufacturing.Framework.Configuration.IDataCollectorConfiguration
我为什么要这样做?我试图通过将设置存储为JSON,定义映射到该JSON的接口,然后让我的IoC容器自动将适当的配置注入到任何请求它的类中来简化我的复杂应用程序配置。