WCF AUTOFAC容器(IContainer)如何在非WCF项目类中使用?
将AUTOFAC添加到服务项目(在下面的示例上)是唯一的解决方案,或者还有其他优雅的方法可以实现这一目标。
将服务作为参数传递,不可行
任何帮助将不胜感激。
WCF服务项目(使用AutoFac WCF)
public class DiscountWCFService
{
public IDiscountService service {get; set;}
}
服务项目
public class DiscountService : IDiscountService
{
public IDiscountRepository repository {get; set;}
}
public static class DiscountExtension
{
public static IDiscountProcessor GetProcessor(this Discount discount)
{
if(discount.Type=1) return TypeAProcessor();
if(discount.Type=2) return TypeBProcessor();
return null;
}
}
public class TypeAProcessor : IDiscountProcessor
{
// Is it possible to use Autofac?
// E.G. IService fooService = AutofacContainer.Resolve<IFooService>
}
public class TypeBProcessor : IDiscountProcessor
{
}
实体项目
public class Discount
{
}
使用autoFac中的键盘注册保存了我的一天。
我的情况的样品解决方案是
builder.RegisterType<TypeAProcessor>().As<IDiscountProcessor>().Keyed<IDataService>(Type.One);
builder.RegisterType<TypeBProcessor>().As<IDiscountProcessor>().Keyed<IDataService>(Type.Two);
builder.Register<Func<Discount, IDiscountProcessor>>(c =>
{
var componentContext = c.Resolve<IComponentContext>();
return (discount) =>
{
var processor = componentContext.ResolveKeyed<IDiscountProcessor>(discount.Type);
return dataService;
};
});