使用Unity解析各种类型的特定构造函数参数

时间:2013-03-29 16:59:20

标签: .net unity-container

假设我有以下课程。

public class Service1
{
   public Service1(Dependency1 dependency1, Dependency2 dependency2, string myAppSetting)
   {
   }
}

public class Service2
{
   public Service2(DependencyA dependency1, ..., DependencyD dependency4, string myAppSetting)
   {
   }
}

Unity容器用于通过依赖注入填充构造函数参数;从不直接调用container.Resolve(..)方法。

以上类具有各种参数,但最后一个参数string myAppSetting始终相同。有没有办法配置Unity容器以始终将具有特定基元类型和名称的参数解析为不同类中的特定值?

我知道你可以为每种对我来说都很脆弱的类型注册注入构造函数。另一种方法可能是将字符串参数包装在自定义类中。但我想知道是否有办法处理特定的基本类型构造函数参数。

2 个答案:

答案 0 :(得分:2)

我已经创建了一个包装我的AppSettings的界面。这允许我将应用程序设置注入我的类型。

<强> IAppSettings

public interface IAppSettings {
    string MySetting { get; set; }
    ...
}

<强> UnityConfig

container.RegisterInstance<IAppSettings>(AppSettings.Current);
container.RegisterType<IService1, Service1>();
container.RegisterType<IService2, Service2>();

<强>服务1

public class Service1
{
    public Service1(Dependency1 dependency1, Dependency2 dependency2, IAppSettings appSettings)
    {
        var mySetting = appSettings.MySetting;
    }
}

以下是原始参数的一些选项:Register a type with primitive-arguments constructor?

答案 1 :(得分:0)

我认为您不能让Unity为任何类解析名为“myAppSettings”的所有 string参数。但是,您可以通过名称为特定类解析参数。类似的东西:

Container.RegisterType<Service2, Service2>(
            new InjectionConstructor(
                    new ResolvedParameter<string>(), 
                        "myAppSetting"));