wpf,console类程序,集成
public static void Run ( )
{
var serviceP = new ServiceCollection ( ) . AddTransient < A > ( ) ;
var autoContainer = new ContainerBuilder ( ) ;
autoContainer. Populate ( serviceP) ;
autoContainer. RegisterType < AInAutoFac > ( ) ;
var container = autoContainer. Build ( ) ;
var ss = new AutofacServiceProvider ( container) ;
var a1 = ss. GetService < A > ( ) ;
var a2 = ss. GetService < A > ( ) ;
}
class A
{ }
class AInAutoFac
{
}
public class Base
{
public Base ( )
{
Console. WriteLine ( $"Created:{GetType().Name}" ) ;
}
}
public interface IAccount { }
public interface IMessage { }
public interface ITool { }
public class Account : Base , IAccount { }
public class Message : Base , IMessage { }
public class Tool : Base , ITool { }
public static void Run ( )
{
var serviceCollection = new ServiceCollection ( )
. AddTransient < ITool , Tool > ( ) ;
var containerBuilder = new ContainerBuilder ( ) ;
containerBuilder. Populate ( serviceCollection) ;
containerBuilder. RegisterType < Test > ( ) . As < ITest > ( ) . PropertiesAutowired ( ) ;
containerBuilder. RegisterAssemblyTypes ( Assembly. GetExecutingAssembly ( ) )
. Where ( t = > t. BaseType == typeof ( Base) )
. As ( t = > t. GetInterfaces ( ) [ 0 ] )
. InstancePerLifetimeScope ( ) ;
var container = containerBuilder. Build ( ) ;
IServiceProvider provider = new AutofacServiceProvider ( container) ;
Debug. Assert ( provider. GetService < IAccount > ( ) is Account) ;
Debug. Assert ( provider. GetService < IMessage > ( ) is Message) ;
Debug. Assert ( provider. GetService < ITool > ( ) is Tool) ;
var test = provider. GetService < ITest > ( ) ;
Debug. Assert ( test. Message is Message) ;
Console. Read ( ) ;
}
Aspnet core 集成autofac
使用autofac工厂
public static IHostBuilder CreateHostBuilder ( string [ ] args) = >
Host. CreateDefaultBuilder ( args)
. ConfigureWebHostDefaults ( webBuilder = >
{
webBuilder. UseStartup < Startup > ( ) ;
} )
. UseServiceProviderFactory ( new AutofacServiceProviderFactory ( ) ) ;
Startup 里面添加容器配置
public void ConfigureContainer ( ContainerBuilder builder)
{
var assembly = Assembly. GetExecutingAssembly ( ) ;
builder. RegisterAssemblyTypes ( Assembly. GetExecutingAssembly ( ) )
. Where ( t = > t. Namespace == assembly. GetName ( ) . Name + ".Services" )
. AsImplementedInterfaces ( )
. InstancePerLifetimeScope ( ) ;
}
Aspnet core 集成Scrutor
public void ConfigureServices ( IServiceCollection services)
{
services. AddControllers ( ) ;
services. Scan ( scan = > scan
. FromAssemblyOf < Startup > ( )
. AddClasses ( classes = >
classes. Where ( t = > t. Name. EndsWith ( "Service" , StringComparison. OrdinalIgnoreCase) ) )
. UsingRegistrationStrategy ( RegistrationStrategy. Throw)
. AsMatchingInterface ( )
. WithScopedLifetime ( )
) ;
}