2017-09-01 31 views
0

我进入统一的8个小时,并且已经计算出了一些内容,但是我无法找到与此相关的角度。我有一个IResourceManager统一 - 在其他已解决的类型中使用已解决的类型作为参数

public interface IResourceManager 
{ 
    ILogger Logger { get; set; } 
    string Path { get; set; } 
} 

和相应的类型:

public class ResourceManager : IResourceManager 
{ 
    public ResourceManager(ILogger logger, string path) 
    { 
     Logger = logger; 
     Path = path; 
    } 
    public ILogger Logger { get; set; } 
    public string Path { get; set; } 
} 

Futhermore

public class Logger : ILogger 
{ } 

最后

public ResourceManagerController(ILogger logger, IResourceManager imageResourceManager) 
{} 

我想表现的记录器和ResourceMa非常喜欢单身。只要IResourceManager中没有ILogger,我就可以继续工作,但我一直在收到“无默认构造函数”异常。

到目前为止,我有:

public static void Register(HttpConfiguration config) 
{ 
    var container = new UnityContainer(); 

    container.RegisterType<ILogger, Logger>("DefaultLogger", new ContainerControlledLifetimeManager()); 

    container.RegisterType<IResourceManager, ResourceManager>("imageResourceManager", new ContainerControlledLifetimeManager(), 
     new InjectionConstructor(new ResolvedParameter<ILogger>("DefaultLogger"), "basePath")); 

    config.DependencyResolver = new UnityResolver(container); 

    // Web API routes ... 
} 

我怎么都让ResourceManagerController IST的成功实例化和两LoggerResourceManager作为单身人士注册我的类型?

回答

0

如果你想注册一个记录器作为默认使用,你不能命名注册。 如果你想要所有命名的注册,让统一注入一个数组。

要么...

container.RegisterType<ILogger, Logger>(new ContainerControlledLifetimeManager()); 
container.RegisterType<IResourceManager, ResourceManager>(new ContainerControlledLifetimeManager(), new InjectionConstructor(new ResolvedParameter<ILogger>(), "basePath")); 

public ResourceManagerController(ILogger logger, IResourceManager imageResourceManager) 
{} 

或...

container.RegisterType<ILogger, Logger>(new ContainerControlledLifetimeManager()); 
container.RegisterType<IResourceManager, ResourceManager>("imageResourceManager", new ContainerControlledLifetimeManager(), new InjectionConstructor(new ResolvedParameter<ILogger>(), "basePath")); 

public ResourceManagerController(ILogger logger, IResourceManager[] allResourceManagers) 
{} 
相关问题