2

假设我有以下课程。

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 容器配置为始终将具有特定原始类型和名称的参数解析为不同类中的特定值?

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

4

2 回答 2

2

我制作了一个界面来包装我的AppSettings. 这允许我将应用程序设置注入我的类型。

应用程序设置

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

统一配置

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;
    }
}

以下是原始参数的一些选项:使用原始参数构造函数注册类型?

于 2013-03-29T18:21:39.350 回答
0

我认为您无法让 Unity 为任何类解析所有 string名为“myAppSettings”的参数。但是,您可以让它按名称解析特定类的参数。就像是:

Container.RegisterType<Service2, Service2>(
            new InjectionConstructor(
                    new ResolvedParameter<string>(), 
                        "myAppSetting"));
于 2013-03-29T17:14:26.313 回答