2012-02-28 111 views
3

以下是我的问题:我有一个容器,它将具体类型注册为接口。解析类型而不创建对象

builder.RegisterType<DeleteOrganization>().As<IDeleteOrganization>(); 

我执行序列化的项目我做和BindToType的方法,我需要实现我想要返回一个类型对象SerializationBinder。 BindToType方法为我提供了一个assemblyName和typeName(两个字符串)来帮助我创建一个类型对象。我想要做的是如果typeName是一个接口,我想问Autofac什么具体的实现类型是为该接口类型没有实际拥有它创建该对象。那可能吗?

回答

5

如果您使用RegisterType注册您的服务,这是可能的。我写了一个快速测试,可以帮助您提取所需的数据。


private interface IDeleteOrganization 
{ 

} 

private class DeleteOrganization : IDeleteOrganization 
{ 

} 


[TestMethod] 
public void CanResolveConcreteType() 
{ 
    var builder = new ContainerBuilder(); 

    builder.RegisterType() 
     .As(); 

    using(var container = builder.Build()) 
    { 
     var registration = container.ComponentRegistry 
      .RegistrationsFor(new TypedService(typeof (IDeleteOrganization))) 
      .SingleOrDefault(); 

     if (registration != null) 
     { 
      var activator = registration.Activator as ReflectionActivator; 
      if (activator != null) 
      { 
       //we can get the type 
       var type = activator.LimitType; 
       Assert.AreEqual(type, typeof (DeleteOrganization)); 
      } 
     } 
    } 
}