Asp.net mvc 如何在所有项目中避免autofac引用
我正在使用autofac作为IOC容器进行asp.net mvc项目。我有一个界面IDependencyBuilder,如下所示Asp.net mvc 如何在所有项目中避免autofac引用,asp.net-mvc,inversion-of-control,autofac,Asp.net Mvc,Inversion Of Control,Autofac,我正在使用autofac作为IOC容器进行asp.net mvc项目。我有一个界面IDependencyBuilder,如下所示 public interface IDependencyBuilder { void Build(ContainerBuilder builder); } 现在我的客户机项目,如果他们需要提供一些实现,他们就会实现这个接口。比如说 public class SomeDependencyBuilder : IDependencyBuilder { publ
public interface IDependencyBuilder
{
void Build(ContainerBuilder builder);
}
现在我的客户机项目,如果他们需要提供一些实现,他们就会实现这个接口。比如说
public class SomeDependencyBuilder : IDependencyBuilder
{
public void Build(ContainerBuilder builder)
{
builder.RegisterType<FeedService>().As<IFeedService>();
}
}
一切都很好。现在的问题是,我必须在所有客户端项目中添加对Autofac库项目的引用。此外,如果我需要用其他IOC容器替换autofac,我需要更改所有代码。所以这让我感觉很糟糕。
我想要实现的是从客户机项目返回对象列表(实现和接口),并在我的启动函数中注册它们
public interface IDependencyBuilderNew
{
List<SomeObject> GetList();
}
公共接口IDependencyBuilderNew
{
List GetList();
}
现在启动函数应该如下所示
public static void BuildModule(ContainerBuilder builder)
{
var type = typeof(IDependencyBuilderNew);
var types = AssemblyLocator.GetBinFolderAssemblies().ToList()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p) && !p.IsInterface && !p.IsAbstract);
foreach (var type in types)
{
var list =((IDependencyBuilderNew)Activator.CreateInstance(type)).GetList();
foreach(var l in list)
{
builder.RegisterType<l.Class>().As<l.InterFace>();
}
}
}
publicstaticvoidbuildmodule(ContainerBuilder-builder)
{
var type=typeof(IDependencyBuilderNew);
var types=AssemblyLocator.GetBinFolderAssemblies().ToList()
.SelectMany(s=>s.GetTypes())
其中(p=>type.IsAssignableFrom(p)&&!p.IsInterface&&!p.isastract);
foreach(类型中的变量类型)
{
var list=((IDependencyBuilderNew)Activator.CreateInstance(type)).GetList();
foreach(列表中的变量l)
{
builder.RegisterType().As();
}
}
}
我将如何实现SomeObject,以及在类似情况下的最佳实践是什么
谢谢
帕明德
public static void BuildModule(ContainerBuilder builder)
{
var type = typeof(IDependencyBuilderNew);
var types = AssemblyLocator.GetBinFolderAssemblies().ToList()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p) && !p.IsInterface && !p.IsAbstract);
foreach (var type in types)
{
var list =((IDependencyBuilderNew)Activator.CreateInstance(type)).GetList();
foreach(var l in list)
{
builder.RegisterType<l.Class>().As<l.InterFace>();
}
}
}