我正在使用带有 Unity 的 Prism 来执行 IoC。我有一些类在它们的构造函数中有一些值类型参数(例如,字符串路径、整数)。
如果我想解析这些类,我应该如何处理这些参数?
我应该将这些参数放入接口还是应该将它们放入一个函数并在类解析后调用它?
谢谢,
魏
我正在使用带有 Unity 的 Prism 来执行 IoC。我有一些类在它们的构造函数中有一些值类型参数(例如,字符串路径、整数)。
如果我想解析这些类,我应该如何处理这些参数?
我应该将这些参数放入接口还是应该将它们放入一个函数并在类解析后调用它?
谢谢,
魏
您需要注册实现这些接口的类型。当您这样做时,您可以指定用于实例化类的构造函数参数,并且您可以提供实际值或要求容器注入解析的引用。请参阅http://msdn.microsoft.com/en-us/library/ff660882(v=pandp.20).aspx和http://msdn.microsoft.com/en-us/library/ff660923(v=pandp. 20).aspx。
好吧,我尝试了很多不同的方法(例如注册具有特定名称的简单值,我尝试在入口点配置这些东西,当您配置整个 DI 容器时等),但它们都不清楚增加代码的复杂性。恕我直言,单一(少数)接口IConfiguration
是最清晰、健壮和可维护的解决方案。
所以,现在我在几乎所有的应用程序中都使用这种方式:
interface IConfiguration
{
string ConnectionString { get; }
int MaxLevels { get; }
}
class Configuration: IConfiguration
{
string ConnectionString { get { return "BlahBlah"; } }
int MaxLevels { get { return 123; } }
}
myUnityContainer.RegisterType<IConfiguration, Configuration>(new ContainerControlledLifetimeManager();
class YourClass
{
public YourClass(IConfiguration configuration)
{
// Use settings from "configuration"
}
}
当然,通常所有这些属性实际上都从 App.config 文件(或数据库)返回值
PS。请记住,您的代码不仅应该“干净且理论上很好”,而且好的代码的主要特征是可维护性和健壮性。任何人都应该打开您的代码并立即理解您的意思。恕我直言,此解决方案比其他解决方案更符合此标准。