在 n 层架构的另一个项目级别使用 WCF Autofac 容器
Use WCF Autofac Container in another project level in n-tier architecture
WCF Autofac Container (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 中使用 keyed registration 拯救了我。
我的案例的示例解决方案是
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;
};
});
WCF Autofac Container (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 中使用 keyed registration 拯救了我。
我的案例的示例解决方案是
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;
};
});